mirror of
https://github.com/momo5502/emulator.git
synced 2026-01-18 03:13:55 +00:00
Better message transmission
This commit is contained in:
@@ -1,21 +1,54 @@
|
||||
#include "event_handler.hpp"
|
||||
#include "message_transmitter.hpp"
|
||||
|
||||
#include <base64.hpp>
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable : 4244)
|
||||
#endif
|
||||
|
||||
#include "events_generated.hxx"
|
||||
|
||||
#include "message_transmitter.hpp"
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(pop)
|
||||
#endif
|
||||
|
||||
namespace debugger
|
||||
{
|
||||
namespace
|
||||
{
|
||||
void handle_event(event_context& c, const event& e, const nlohmann::json& obj)
|
||||
std::optional<Debugger::DebugEventT> receive_event()
|
||||
{
|
||||
switch (e.type)
|
||||
const auto message = receive_message();
|
||||
if (message.empty())
|
||||
{
|
||||
case event_type::pause:
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
const auto data = base64::from_base64(message);
|
||||
|
||||
flatbuffers::Verifier verifier(reinterpret_cast<const uint8_t*>(data.data()), data.size());
|
||||
if (!Debugger::VerifyDebugEventBuffer(verifier))
|
||||
{
|
||||
return std::nullopt;
|
||||
}
|
||||
|
||||
Debugger::DebugEventT e{};
|
||||
Debugger::GetDebugEvent(data.data())->UnPackTo(&e);
|
||||
|
||||
return {std::move(e)};
|
||||
}
|
||||
|
||||
void handle_event(event_context& c, const Debugger::DebugEventT& e)
|
||||
{
|
||||
switch (e.event.type)
|
||||
{
|
||||
case Debugger::Event_PauseEvent:
|
||||
c.win_emu.emu().stop();
|
||||
break;
|
||||
|
||||
case event_type::run:
|
||||
case Debugger::Event_RunEvent:
|
||||
c.resume = true;
|
||||
break;
|
||||
|
||||
@@ -23,19 +56,6 @@ namespace debugger
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void handle_object(event_context& c, const nlohmann::json& obj)
|
||||
{
|
||||
try
|
||||
{
|
||||
const auto e = obj.get<event>();
|
||||
handle_event(c, e, obj);
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
puts(e.what());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void handle_events(event_context& c)
|
||||
@@ -44,13 +64,13 @@ namespace debugger
|
||||
{
|
||||
suspend_execution(0ms);
|
||||
|
||||
const auto obj = receive_object();
|
||||
if (obj.is_null())
|
||||
const auto e = receive_event();
|
||||
if (!e.has_value())
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
handle_object(c, obj);
|
||||
handle_event(c, *e);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user