Debugger: Reorganize state handling.

Looking like this will be needed for disasm caches, etc.
This commit is contained in:
Unknown W. Brackets
2018-06-08 06:59:16 -07:00
parent 0a21063525
commit a4044fd6a0
4 changed files with 40 additions and 8 deletions
+25 -7
View File
@@ -42,11 +42,15 @@
#include "Core/Debugger/WebSocket/CPUCoreSubscriber.h"
typedef void (*DebuggerEventHandler)(DebuggerRequest &req);
static const std::unordered_map<std::string, DebuggerEventHandler> debuggerEvents({
{"cpu.getAllRegs", &WebSocketCPUGetAllRegs},
{"cpu.getReg", &WebSocketCPUGetReg},
{"cpu.setReg", &WebSocketCPUSetReg},
typedef void *(*SubscriberInit)(DebuggerEventHandlerMap &map);
typedef void (*Subscribershutdown)(void *p);
struct SubscriberInfo {
SubscriberInit init;
Subscribershutdown shutdown;
};
static const std::vector<SubscriberInfo> subscribers({
{ &WebSocketCPUCoreInit, nullptr },
});
void HandleDebuggerRequest(const http::Request &request) {
@@ -58,6 +62,12 @@ void HandleDebuggerRequest(const http::Request &request) {
GameBroadcaster game;
SteppingBroadcaster stepping;
std::unordered_map<std::string, DebuggerEventHandler> eventHandlers;
std::vector<void *> subscriberData;
for (auto info : subscribers) {
subscriberData.push_back(info.init(eventHandlers));
}
ws->SetTextHandler([&](const std::string &t) {
JsonReader reader(t.c_str(), t.size());
if (!reader.ok()) {
@@ -73,8 +83,8 @@ void HandleDebuggerRequest(const http::Request &request) {
}
DebuggerRequest req(event, ws, root);
auto eventFunc = debuggerEvents.find(event);
if (eventFunc != debuggerEvents.end()) {
auto eventFunc = eventHandlers.find(event);
if (eventFunc != eventHandlers.end()) {
eventFunc->second(req);
req.Finish();
} else {
@@ -92,5 +102,13 @@ void HandleDebuggerRequest(const http::Request &request) {
stepping.Broadcast(ws);
}
for (size_t i = 0; i < subscribers.size(); ++i) {
if (subscribers[i].shutdown) {
subscribers[i].shutdown(subscriberData[i]);
} else {
assert(!subscriberData[i]);
}
}
delete ws;
}