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
19#include "protos/rom_service.grpc.pb.h"
20#ifdef _WIN32
21#pragma pop_macro("DWORD")
22#pragma pop_macro("ERROR")
23#endif // _WIN32
24// Note: Proto files will be generated to build directory
25#endif
26
28#include "rom/rom.h"
29
30namespace yaze {
31
32namespace net {
33
34#ifdef YAZE_WITH_GRPC
35
47class RomServiceImpl final : public proto::RomService::Service {
48 public:
52 struct Config {
53 bool require_approval_for_writes = true; // Submit writes as proposals
54 bool enable_version_management = true; // Auto-snapshot before changes
55 int max_read_size_bytes = 1024 * 1024; // 1MB max per read
56 bool allow_raw_rom_access = true; // Allow direct byte access
57 };
58
65 RomServiceImpl(Rom* rom, 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(grpc::ServerContext* context,
78 const proto::ReadBytesRequest* request,
79 proto::ReadBytesResponse* response) override;
80
81 grpc::Status WriteBytes(grpc::ServerContext* context,
82 const proto::WriteBytesRequest* request,
83 proto::WriteBytesResponse* response) override;
84
85 grpc::Status GetRomInfo(grpc::ServerContext* context,
86 const proto::GetRomInfoRequest* request,
87 proto::GetRomInfoResponse* response) override;
88
89 // =========================================================================
90 // Overworld Operations
91 // =========================================================================
92
93 grpc::Status ReadOverworldMap(
94 grpc::ServerContext* context,
95 const proto::ReadOverworldMapRequest* request,
96 proto::ReadOverworldMapResponse* response) override;
97
98 grpc::Status WriteOverworldTile(
99 grpc::ServerContext* context,
100 const proto::WriteOverworldTileRequest* request,
101 proto::WriteOverworldTileResponse* response) override;
102
103 // =========================================================================
104 // Dungeon Operations
105 // =========================================================================
106
107 grpc::Status ReadDungeonRoom(
108 grpc::ServerContext* context,
109 const proto::ReadDungeonRoomRequest* request,
110 proto::ReadDungeonRoomResponse* response) override;
111
112 grpc::Status WriteDungeonTile(
113 grpc::ServerContext* context,
114 const proto::WriteDungeonTileRequest* request,
115 proto::WriteDungeonTileResponse* response) override;
116
117 // =========================================================================
118 // Sprite Operations
119 // =========================================================================
120
121 grpc::Status ReadSprite(grpc::ServerContext* context,
122 const proto::ReadSpriteRequest* request,
123 proto::ReadSpriteResponse* response) override;
124
125 // =========================================================================
126 // Proposal System
127 // =========================================================================
128
129 grpc::Status SubmitRomProposal(
130 grpc::ServerContext* context,
131 const proto::SubmitRomProposalRequest* request,
132 proto::SubmitRomProposalResponse* response) override;
133
134 grpc::Status GetProposalStatus(
135 grpc::ServerContext* context,
136 const proto::GetProposalStatusRequest* request,
137 proto::GetProposalStatusResponse* response) override;
138
139 // =========================================================================
140 // Version Management
141 // =========================================================================
142
143 grpc::Status CreateSnapshot(grpc::ServerContext* context,
144 const proto::CreateSnapshotRequest* request,
145 proto::CreateSnapshotResponse* response) override;
146
147 grpc::Status RestoreSnapshot(
148 grpc::ServerContext* context,
149 const proto::RestoreSnapshotRequest* request,
150 proto::RestoreSnapshotResponse* response) override;
151
152 grpc::Status ListSnapshots(grpc::ServerContext* context,
153 const proto::ListSnapshotsRequest* request,
154 proto::ListSnapshotsResponse* response) override;
155
156 private:
157 Config config_;
158 Rom* rom_; // Not owned
159 RomVersionManager* version_mgr_; // Not owned, may be null
160 ProposalApprovalManager* approval_mgr_; // Not owned, may be null
161
162 // Helper to check if ROM is loaded
163 grpc::Status ValidateRomLoaded();
164
165 // Helper to create snapshot before write operations
166 absl::Status MaybeCreateSnapshot(const std::string& description);
167};
168
169#endif // YAZE_WITH_GRPC
170
171} // namespace net
172
173} // namespace yaze
174
175#endif // YAZE_APP_NET_ROM_SERVICE_IMPL_H_
absl::Status ReadBytes(std::istream &in, void *data, size_t size)
Definition snes.cc:76
absl::Status WriteBytes(std::ostream &out, const void *data, size_t size)
Definition snes.cc:68