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
12#include <grpcpp/grpcpp.h>
13
14#include "protos/rom_service.grpc.pb.h"
15// Note: Proto files will be generated to build directory
16#endif
17
18#include <functional>
20#include "rom/rom.h"
21
22namespace yaze {
23
24namespace net {
25
26#ifdef YAZE_WITH_GRPC
27
31class RomServiceImpl final : public proto::RomService::Service {
32 public:
33 using RomGetter = std::function<Rom*()>;
34
35 struct Config {
36 bool require_approval_for_writes = true;
37 bool enable_version_management = true;
38 int max_read_size_bytes = 1024 * 1024;
39 bool allow_raw_rom_access = true;
40 };
41
48 RomServiceImpl(RomGetter rom_getter, RomVersionManager* version_mgr = nullptr,
49 ProposalApprovalManager* approval_mgr = nullptr);
50
51 ~RomServiceImpl() override = default;
52
53 // Initialize with configuration
54 void SetConfig(const Config& config);
55
56 // =========================================================================
57 // Basic ROM Operations
58 // =========================================================================
59
60 grpc::Status ReadBytes(grpc::ServerContext* context,
61 const proto::ReadBytesRequest* request,
62 proto::ReadBytesResponse* response) override;
63
64 grpc::Status WriteBytes(grpc::ServerContext* context,
65 const proto::WriteBytesRequest* request,
66 proto::WriteBytesResponse* response) override;
67
68 grpc::Status GetRomInfo(grpc::ServerContext* context,
69 const proto::GetRomInfoRequest* request,
70 proto::GetRomInfoResponse* response) override;
71
72 // =========================================================================
73 // Overworld Operations
74 // =========================================================================
75
76 grpc::Status ReadOverworldMap(
77 grpc::ServerContext* context,
78 const proto::ReadOverworldMapRequest* request,
79 proto::ReadOverworldMapResponse* response) override;
80
81 grpc::Status WriteOverworldTile(
82 grpc::ServerContext* context,
83 const proto::WriteOverworldTileRequest* request,
84 proto::WriteOverworldTileResponse* response) override;
85
86 // =========================================================================
87 // Dungeon Operations
88 // =========================================================================
89
90 grpc::Status ReadDungeonRoom(
91 grpc::ServerContext* context,
92 const proto::ReadDungeonRoomRequest* request,
93 proto::ReadDungeonRoomResponse* response) override;
94
95 grpc::Status WriteDungeonTile(
96 grpc::ServerContext* context,
97 const proto::WriteDungeonTileRequest* request,
98 proto::WriteDungeonTileResponse* response) override;
99
100 // =========================================================================
101 // Sprite Operations
102 // =========================================================================
103
104 grpc::Status ReadSprite(grpc::ServerContext* context,
105 const proto::ReadSpriteRequest* request,
106 proto::ReadSpriteResponse* response) override;
107
108 // =========================================================================
109 // Proposal System
110 // =========================================================================
111
112 grpc::Status SubmitRomProposal(
113 grpc::ServerContext* context,
114 const proto::SubmitRomProposalRequest* request,
115 proto::SubmitRomProposalResponse* response) override;
116
117 grpc::Status GetProposalStatus(
118 grpc::ServerContext* context,
119 const proto::GetProposalStatusRequest* request,
120 proto::GetProposalStatusResponse* response) override;
121
122 // =========================================================================
123 // Version Management
124 // =========================================================================
125
126 grpc::Status CreateSnapshot(grpc::ServerContext* context,
127 const proto::CreateSnapshotRequest* request,
128 proto::CreateSnapshotResponse* response) override;
129
130 grpc::Status RestoreSnapshot(
131 grpc::ServerContext* context,
132 const proto::RestoreSnapshotRequest* request,
133 proto::RestoreSnapshotResponse* response) override;
134
135 grpc::Status ListSnapshots(grpc::ServerContext* context,
136 const proto::ListSnapshotsRequest* request,
137 proto::ListSnapshotsResponse* response) override;
138
139 private:
140 Config config_;
141 RomGetter rom_getter_;
142 RomVersionManager* version_mgr_; // Not owned, may be null
143 ProposalApprovalManager* approval_mgr_; // Not owned, may be null
144
145 // Helper to check if ROM is loaded
146 grpc::Status ValidateRomLoaded();
147
148 // Helper to create snapshot before write operations
149 absl::Status MaybeCreateSnapshot(const std::string& description);
150};
151
152#endif // YAZE_WITH_GRPC
153
154} // namespace net
155
156} // namespace yaze
157
158#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