yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
emulator_service_impl.h
Go to the documentation of this file.
1#pragma once
2
3#include <memory>
4
6
7#include <grpcpp/grpcpp.h>
8
11#include "protos/emulator_service.grpc.pb.h"
12
13#include "app/emu/i_emulator.h"
14
15namespace yaze {
16class Rom;
17namespace emu {
18// Emulator forward decl no longer needed here if we include i_emulator.h
19}
20}
21
22namespace yaze::net {
23
24class EmulatorServiceImpl final : public agent::EmulatorService::Service {
25 public:
26 using RomGetter = std::function<Rom*()>;
27 using RomLoader = std::function<bool(const std::string& path)>;
28 explicit EmulatorServiceImpl(emu::IEmulator* emulator,
29 RomGetter rom_getter = nullptr,
30 RomLoader rom_loader = nullptr);
31
32 // --- ROM Loading ---
33 grpc::Status LoadRom(grpc::ServerContext* context,
34 const agent::LoadRomRequest* request,
35 agent::LoadRomResponse* response) override;
36 grpc::Status GetLoadedRomPath(grpc::ServerContext* context,
37 const agent::Empty* request,
38 agent::LoadedRomPathResponse* response) override;
39
40 // --- Core Lifecycle & Control ---
41 grpc::Status ControlEmulator(grpc::ServerContext* context,
42 const agent::ControlRequest* request,
43 agent::CommandResponse* response) override;
44
45 grpc::Status StepEmulator(grpc::ServerContext* context,
46 const agent::StepControlRequest* request,
47 agent::StepResponse* response) override;
48
49 grpc::Status RunToBreakpoint(grpc::ServerContext* context,
50 const agent::Empty* request,
51 agent::BreakpointHitResponse* response) override;
52
53 // --- Input & State ---
54 grpc::Status PressButtons(grpc::ServerContext* context,
55 const agent::ButtonRequest* request,
56 agent::CommandResponse* response) override;
57 grpc::Status ReleaseButtons(grpc::ServerContext* context,
58 const agent::ButtonRequest* request,
59 agent::CommandResponse* response) override;
60 grpc::Status HoldButtons(grpc::ServerContext* context,
61 const agent::ButtonHoldRequest* request,
62 agent::CommandResponse* response) override;
63 grpc::Status GetGameState(grpc::ServerContext* context,
64 const agent::GameStateRequest* request,
65 agent::GameStateResponse* response) override;
66 grpc::Status ReadMemory(grpc::ServerContext* context,
67 const agent::MemoryRequest* request,
68 agent::MemoryResponse* response) override;
69 grpc::Status WriteMemory(grpc::ServerContext* context,
70 const agent::MemoryWriteRequest* request,
71 agent::CommandResponse* response) override;
72
73 // --- Debugging Management ---
74 grpc::Status BreakpointControl(grpc::ServerContext* context,
75 const agent::BreakpointControlRequest* request,
76 agent::BreakpointControlResponse* response) override;
77
78 grpc::Status WatchpointControl(grpc::ServerContext* context,
79 const agent::WatchpointControlRequest* request,
80 agent::WatchpointControlResponse* response) override;
81
82 // --- Analysis & Symbols ---
83 grpc::Status GetDisassembly(grpc::ServerContext* context,
84 const agent::DisassemblyRequest* request,
85 agent::DisassemblyResponse* response) override;
86 grpc::Status GetExecutionTrace(grpc::ServerContext* context,
87 const agent::TraceRequest* request,
88 agent::TraceResponse* response) override;
89 grpc::Status ResolveSymbol(grpc::ServerContext* context,
90 const agent::SymbolLookupRequest* request,
91 agent::SymbolLookupResponse* response) override;
92 grpc::Status GetSymbolAt(grpc::ServerContext* context,
93 const agent::AddressRequest* request,
94 agent::SymbolLookupResponse* response) override;
95 grpc::Status LoadSymbols(grpc::ServerContext* context,
96 const agent::SymbolFileRequest* request,
97 agent::CommandResponse* response) override;
98
99 // --- Session & Experiments ---
100 grpc::Status GetDebugStatus(grpc::ServerContext* context,
101 const agent::Empty* request,
102 agent::DebugStatusResponse* response) override;
103 grpc::Status TestRun(grpc::ServerContext* context,
104 const agent::TestRunRequest* request,
105 agent::TestRunResponse* response) override;
106
107 // --- Save State Management ---
108 grpc::Status SaveState(grpc::ServerContext* context,
109 const agent::SaveStateRequest* request,
110 agent::SaveStateResponse* response) override;
111 grpc::Status LoadState(grpc::ServerContext* context,
112 const agent::LoadStateRequest* request,
113 agent::LoadStateResponse* response) override;
114 grpc::Status ListStates(grpc::ServerContext* context,
115 const agent::ListStatesRequest* request,
116 agent::ListStatesResponse* response) override;
117
118 private:
119 emu::IEmulator* emulator_; // Non-owning pointer to the emulator interface interface
122 emu::debug::SymbolProvider symbol_provider_; // Symbol table for debugging
123};
124
125} // namespace yaze::net
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Definition rom.h:28
Abstract interface for emulator backends (Internal vs Mesen2)
Definition i_emulator.h:23
Provider for symbol (label) resolution in disassembly.
grpc::Status GetSymbolAt(grpc::ServerContext *context, const agent::AddressRequest *request, agent::SymbolLookupResponse *response) override
std::function< bool(const std::string &path)> RomLoader
grpc::Status ControlEmulator(grpc::ServerContext *context, const agent::ControlRequest *request, agent::CommandResponse *response) override
grpc::Status TestRun(grpc::ServerContext *context, const agent::TestRunRequest *request, agent::TestRunResponse *response) override
grpc::Status GetDebugStatus(grpc::ServerContext *context, const agent::Empty *request, agent::DebugStatusResponse *response) override
grpc::Status WriteMemory(grpc::ServerContext *context, const agent::MemoryWriteRequest *request, agent::CommandResponse *response) override
grpc::Status ReleaseButtons(grpc::ServerContext *context, const agent::ButtonRequest *request, agent::CommandResponse *response) override
grpc::Status PressButtons(grpc::ServerContext *context, const agent::ButtonRequest *request, agent::CommandResponse *response) override
grpc::Status GetGameState(grpc::ServerContext *context, const agent::GameStateRequest *request, agent::GameStateResponse *response) override
grpc::Status BreakpointControl(grpc::ServerContext *context, const agent::BreakpointControlRequest *request, agent::BreakpointControlResponse *response) override
grpc::Status GetDisassembly(grpc::ServerContext *context, const agent::DisassemblyRequest *request, agent::DisassemblyResponse *response) override
grpc::Status LoadSymbols(grpc::ServerContext *context, const agent::SymbolFileRequest *request, agent::CommandResponse *response) override
grpc::Status ReadMemory(grpc::ServerContext *context, const agent::MemoryRequest *request, agent::MemoryResponse *response) override
grpc::Status StepEmulator(grpc::ServerContext *context, const agent::StepControlRequest *request, agent::StepResponse *response) override
grpc::Status HoldButtons(grpc::ServerContext *context, const agent::ButtonHoldRequest *request, agent::CommandResponse *response) override
grpc::Status LoadRom(grpc::ServerContext *context, const agent::LoadRomRequest *request, agent::LoadRomResponse *response) override
grpc::Status GetLoadedRomPath(grpc::ServerContext *context, const agent::Empty *request, agent::LoadedRomPathResponse *response) override
grpc::Status LoadState(grpc::ServerContext *context, const agent::LoadStateRequest *request, agent::LoadStateResponse *response) override
grpc::Status SaveState(grpc::ServerContext *context, const agent::SaveStateRequest *request, agent::SaveStateResponse *response) override
grpc::Status ResolveSymbol(grpc::ServerContext *context, const agent::SymbolLookupRequest *request, agent::SymbolLookupResponse *response) override
emu::debug::SymbolProvider symbol_provider_
grpc::Status ListStates(grpc::ServerContext *context, const agent::ListStatesRequest *request, agent::ListStatesResponse *response) override
grpc::Status GetExecutionTrace(grpc::ServerContext *context, const agent::TraceRequest *request, agent::TraceResponse *response) override
grpc::Status RunToBreakpoint(grpc::ServerContext *context, const agent::Empty *request, agent::BreakpointHitResponse *response) override
EmulatorServiceImpl(emu::IEmulator *emulator, RomGetter rom_getter=nullptr, RomLoader rom_loader=nullptr)
grpc::Status WatchpointControl(grpc::ServerContext *context, const agent::WatchpointControlRequest *request, agent::WatchpointControlResponse *response) override