yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
rom_service_impl.h
Go to the documentation of this file.
1#ifndef YAZE_APP_NET_ROM_SERVICE_IMPL_H_
2#define YAZE_APP_NET_ROM_SERVICE_IMPL_H_
3
4#include <memory>
5#include <string>
6
7#include "absl/status/status.h"
8#include "absl/status/statusor.h"
9
10#ifdef YAZE_WITH_GRPC
11#ifdef _WIN32
12#pragma push_macro("DWORD")
13#pragma push_macro("ERROR")
14#undef DWORD
15#undef ERROR
16#endif // _WIN32
17#include <grpcpp/grpcpp.h>
18#include "protos/rom_service.grpc.pb.h"
19#ifdef _WIN32
20#pragma pop_macro("DWORD")
21#pragma pop_macro("ERROR")
22#endif // _WIN32
23// Note: Proto files will be generated to build directory
24#endif
25
26#include "app/rom.h"
28
29namespace yaze {
30
31namespace net {
32
33#ifdef YAZE_WITH_GRPC
34
46class RomServiceImpl final : public proto::RomService::Service {
47 public:
51 struct Config {
52 bool require_approval_for_writes = true; // Submit writes as proposals
53 bool enable_version_management = true; // Auto-snapshot before changes
54 int max_read_size_bytes = 1024 * 1024; // 1MB max per read
55 bool allow_raw_rom_access = true; // Allow direct byte access
56 };
57
64 RomServiceImpl(Rom* rom,
65 RomVersionManager* version_mgr = nullptr,
66 ProposalApprovalManager* approval_mgr = nullptr);
67
68 ~RomServiceImpl() override = default;
69
70 // Initialize with configuration
71 void SetConfig(const Config& config);
72
73 // =========================================================================
74 // Basic ROM Operations
75 // =========================================================================
76
77 grpc::Status ReadBytes(
78 grpc::ServerContext* context,
79 const proto::ReadBytesRequest* request,
80 proto::ReadBytesResponse* response) override;
81
82 grpc::Status WriteBytes(
83 grpc::ServerContext* context,
84 const proto::WriteBytesRequest* request,
85 proto::WriteBytesResponse* response) override;
86
87 grpc::Status GetRomInfo(
88 grpc::ServerContext* context,
89 const proto::GetRomInfoRequest* request,
90 proto::GetRomInfoResponse* response) override;
91
92 // =========================================================================
93 // Overworld Operations
94 // =========================================================================
95
96 grpc::Status ReadOverworldMap(
97 grpc::ServerContext* context,
98 const proto::ReadOverworldMapRequest* request,
99 proto::ReadOverworldMapResponse* response) override;
100
101 grpc::Status WriteOverworldTile(
102 grpc::ServerContext* context,
103 const proto::WriteOverworldTileRequest* request,
104 proto::WriteOverworldTileResponse* response) override;
105
106 // =========================================================================
107 // Dungeon Operations
108 // =========================================================================
109
110 grpc::Status ReadDungeonRoom(
111 grpc::ServerContext* context,
112 const proto::ReadDungeonRoomRequest* request,
113 proto::ReadDungeonRoomResponse* response) override;
114
115 grpc::Status WriteDungeonTile(
116 grpc::ServerContext* context,
117 const proto::WriteDungeonTileRequest* request,
118 proto::WriteDungeonTileResponse* response) override;
119
120 // =========================================================================
121 // Sprite Operations
122 // =========================================================================
123
124 grpc::Status ReadSprite(
125 grpc::ServerContext* context,
126 const proto::ReadSpriteRequest* request,
127 proto::ReadSpriteResponse* response) override;
128
129 // =========================================================================
130 // Proposal System
131 // =========================================================================
132
133 grpc::Status SubmitRomProposal(
134 grpc::ServerContext* context,
135 const proto::SubmitRomProposalRequest* request,
136 proto::SubmitRomProposalResponse* response) override;
137
138 grpc::Status GetProposalStatus(
139 grpc::ServerContext* context,
140 const proto::GetProposalStatusRequest* request,
141 proto::GetProposalStatusResponse* response) override;
142
143 // =========================================================================
144 // Version Management
145 // =========================================================================
146
147 grpc::Status CreateSnapshot(
148 grpc::ServerContext* context,
149 const proto::CreateSnapshotRequest* request,
150 proto::CreateSnapshotResponse* response) override;
151
152 grpc::Status RestoreSnapshot(
153 grpc::ServerContext* context,
154 const proto::RestoreSnapshotRequest* request,
155 proto::RestoreSnapshotResponse* response) override;
156
157 grpc::Status ListSnapshots(
158 grpc::ServerContext* context,
159 const proto::ListSnapshotsRequest* request,
160 proto::ListSnapshotsResponse* response) override;
161
162 private:
163 Config config_;
164 Rom* rom_; // Not owned
165 RomVersionManager* version_mgr_; // Not owned, may be null
166 ProposalApprovalManager* approval_mgr_; // Not owned, may be null
167
168 // Helper to check if ROM is loaded
169 grpc::Status ValidateRomLoaded();
170
171 // Helper to create snapshot before write operations
172 absl::Status MaybeCreateSnapshot(const std::string& description);
173};
174
175#endif // YAZE_WITH_GRPC
176
177} // namespace net
178
179} // namespace yaze
180
181#endif // YAZE_APP_NET_ROM_SERVICE_IMPL_H_
Main namespace for the application.
Definition controller.cc:20