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 <functional>
4#include <memory>
5
7
8#include <grpcpp/grpcpp.h>
9
10#include "absl/status/statusor.h"
14#include "protos/emulator_service.grpc.pb.h"
15
16#include "app/emu/i_emulator.h"
17
18namespace yaze {
19class Rom;
20namespace emu {
21// Emulator forward decl no longer needed here if we include i_emulator.h
22}
23} // namespace yaze
24
25namespace yaze::net {
26
27class EmulatorServiceImpl final : public agent::EmulatorService::Service {
28 public:
29 using RomGetter = std::function<Rom*()>;
30 using RomLoader = std::function<bool(const std::string& path)>;
31 // Returns a PNG capture for GetGameState(include_screenshot). It must run
32 // the capture on the render thread; GetGameState is called on gRPC threads.
34 std::function<absl::StatusOr<test::ScreenshotArtifact>()>;
35
36 explicit EmulatorServiceImpl(emu::IEmulator* emulator,
37 RomGetter rom_getter = nullptr,
38 RomLoader rom_loader = nullptr);
39
40 // Without a capturer, GetGameState omits the screenshot.
42 screenshot_capturer_ = std::move(capturer);
43 }
44
45 // --- ROM Loading ---
46 grpc::Status LoadRom(grpc::ServerContext* context,
47 const agent::LoadRomRequest* request,
48 agent::LoadRomResponse* response) override;
49 grpc::Status GetLoadedRomPath(
50 grpc::ServerContext* context, const agent::Empty* request,
51 agent::LoadedRomPathResponse* response) override;
52
53 // --- Core Lifecycle & Control ---
54 grpc::Status ControlEmulator(grpc::ServerContext* context,
55 const agent::ControlRequest* request,
56 agent::CommandResponse* response) override;
57
58 grpc::Status StepEmulator(grpc::ServerContext* context,
59 const agent::StepControlRequest* request,
60 agent::StepResponse* response) override;
61
62 grpc::Status RunToBreakpoint(grpc::ServerContext* context,
63 const agent::Empty* request,
64 agent::BreakpointHitResponse* response) override;
65
66 // --- Input & State ---
67 grpc::Status PressButtons(grpc::ServerContext* context,
68 const agent::ButtonRequest* request,
69 agent::CommandResponse* response) override;
70 grpc::Status ReleaseButtons(grpc::ServerContext* context,
71 const agent::ButtonRequest* request,
72 agent::CommandResponse* response) override;
73 grpc::Status HoldButtons(grpc::ServerContext* context,
74 const agent::ButtonHoldRequest* request,
75 agent::CommandResponse* response) override;
76 grpc::Status GetGameState(grpc::ServerContext* context,
77 const agent::GameStateRequest* request,
78 agent::GameStateResponse* response) override;
79 grpc::Status ReadMemory(grpc::ServerContext* context,
80 const agent::MemoryRequest* request,
81 agent::MemoryResponse* response) override;
82 grpc::Status WriteMemory(grpc::ServerContext* context,
83 const agent::MemoryWriteRequest* request,
84 agent::CommandResponse* response) override;
85
86 // --- Debugging Management ---
87 grpc::Status BreakpointControl(
88 grpc::ServerContext* context,
89 const agent::BreakpointControlRequest* request,
90 agent::BreakpointControlResponse* response) override;
91
92 grpc::Status WatchpointControl(
93 grpc::ServerContext* context,
94 const agent::WatchpointControlRequest* request,
95 agent::WatchpointControlResponse* response) override;
96
97 // --- Analysis & Symbols ---
98 grpc::Status GetDisassembly(grpc::ServerContext* context,
99 const agent::DisassemblyRequest* request,
100 agent::DisassemblyResponse* response) override;
101 grpc::Status GetExecutionTrace(grpc::ServerContext* context,
102 const agent::TraceRequest* request,
103 agent::TraceResponse* response) override;
104 grpc::Status ResolveSymbol(grpc::ServerContext* context,
105 const agent::SymbolLookupRequest* request,
106 agent::SymbolLookupResponse* response) override;
107 grpc::Status GetSymbolAt(grpc::ServerContext* context,
108 const agent::AddressRequest* request,
109 agent::SymbolLookupResponse* response) override;
110 grpc::Status LoadSymbols(grpc::ServerContext* context,
111 const agent::SymbolFileRequest* request,
112 agent::CommandResponse* response) override;
113
114 // --- Session & Experiments ---
115 grpc::Status GetDebugStatus(grpc::ServerContext* context,
116 const agent::Empty* request,
117 agent::DebugStatusResponse* response) override;
118 grpc::Status TestRun(grpc::ServerContext* context,
119 const agent::TestRunRequest* request,
120 agent::TestRunResponse* response) override;
121
122 // --- Save State Management ---
123 grpc::Status SaveState(grpc::ServerContext* context,
124 const agent::SaveStateRequest* request,
125 agent::SaveStateResponse* response) override;
126 grpc::Status LoadState(grpc::ServerContext* context,
127 const agent::LoadStateRequest* request,
128 agent::LoadStateResponse* response) override;
129 grpc::Status ListStates(grpc::ServerContext* context,
130 const agent::ListStatesRequest* request,
131 agent::ListStatesResponse* response) override;
132
133 private:
135 emulator_; // Non-owning pointer to the emulator interface interface
139 emu::debug::SymbolProvider symbol_provider_; // Symbol table for debugging
140};
141
142} // 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:49
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< absl::StatusOr< test::ScreenshotArtifact >()> ScreenshotCapturer
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
void SetScreenshotCapturer(ScreenshotCapturer capturer)
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