yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
canvas_automation_client.cc
Go to the documentation of this file.
2
3#include "absl/strings/str_cat.h"
4
5namespace yaze {
6namespace cli {
7
8CanvasAutomationClient::CanvasAutomationClient(const std::string& server_address)
9 : server_address_(server_address) {}
10
12#ifdef YAZE_WITH_GRPC
13 auto channel = grpc::CreateChannel(server_address_,
14 grpc::InsecureChannelCredentials());
15 stub_ = proto::CanvasAutomation::NewStub(channel);
16 return absl::OkStatus();
17#else
18 return absl::UnimplementedError("gRPC support not enabled");
19#endif
20}
21
22absl::Status CanvasAutomationClient::SetTile(const std::string& canvas_id, int x, int y, int tile_id) {
23#ifdef YAZE_WITH_GRPC
24 if (!stub_) return absl::FailedPreconditionError("Not connected");
25
26 grpc::ClientContext context;
27 proto::SetTileRequest request;
28 request.set_canvas_id(canvas_id);
29 request.set_x(x);
30 request.set_y(y);
31 request.set_tile_id(tile_id);
32
33 proto::SetTileResponse response;
34 grpc::Status status = stub_->SetTile(&context, request, &response);
35
36 if (!status.ok()) {
37 return absl::InternalError(status.error_message());
38 }
39 if (!response.success()) {
40 return absl::InternalError(response.error());
41 }
42 return absl::OkStatus();
43#else
44 return absl::UnimplementedError("gRPC support not enabled");
45#endif
46}
47
48absl::StatusOr<int> CanvasAutomationClient::GetTile(const std::string& canvas_id, int x, int y) {
49#ifdef YAZE_WITH_GRPC
50 if (!stub_) return absl::FailedPreconditionError("Not connected");
51
52 grpc::ClientContext context;
53 proto::GetTileRequest request;
54 request.set_canvas_id(canvas_id);
55 request.set_x(x);
56 request.set_y(y);
57
58 proto::GetTileResponse response;
59 grpc::Status status = stub_->GetTile(&context, request, &response);
60
61 if (!status.ok()) {
62 return absl::InternalError(status.error_message());
63 }
64 if (!response.success()) {
65 return absl::InternalError(response.error());
66 }
67 return response.tile_id();
68#else
69 return absl::UnimplementedError("gRPC support not enabled");
70#endif
71}
72
73absl::Status CanvasAutomationClient::SetTiles(const std::string& canvas_id, const std::vector<TileData>& tiles) {
74#ifdef YAZE_WITH_GRPC
75 if (!stub_) return absl::FailedPreconditionError("Not connected");
76
77 grpc::ClientContext context;
78 proto::SetTilesRequest request;
79 request.set_canvas_id(canvas_id);
80
81 for (const auto& t : tiles) {
82 auto* tile = request.add_tiles();
83 tile->set_x(t.x);
84 tile->set_y(t.y);
85 tile->set_tile_id(t.tile_id);
86 }
87
88 proto::SetTilesResponse response;
89 grpc::Status status = stub_->SetTiles(&context, request, &response);
90
91 if (!status.ok()) {
92 return absl::InternalError(status.error_message());
93 }
94 if (!response.success()) {
95 return absl::InternalError(response.error());
96 }
97 return absl::OkStatus();
98#else
99 return absl::UnimplementedError("gRPC support not enabled");
100#endif
101}
102
103absl::Status CanvasAutomationClient::SelectTile(const std::string& canvas_id, int x, int y) {
104#ifdef YAZE_WITH_GRPC
105 if (!stub_) return absl::FailedPreconditionError("Not connected");
106
107 grpc::ClientContext context;
108 proto::SelectTileRequest request;
109 request.set_canvas_id(canvas_id);
110 request.set_x(x);
111 request.set_y(y);
112
113 proto::SelectTileResponse response;
114 grpc::Status status = stub_->SelectTile(&context, request, &response);
115
116 if (!status.ok()) {
117 return absl::InternalError(status.error_message());
118 }
119 if (!response.success()) {
120 return absl::InternalError(response.error());
121 }
122 return absl::OkStatus();
123#else
124 return absl::UnimplementedError("gRPC support not enabled");
125#endif
126}
127
128absl::Status CanvasAutomationClient::SelectTileRect(const std::string& canvas_id, int x1, int y1, int x2, int y2) {
129#ifdef YAZE_WITH_GRPC
130 if (!stub_) return absl::FailedPreconditionError("Not connected");
131
132 grpc::ClientContext context;
133 proto::SelectTileRectRequest request;
134 request.set_canvas_id(canvas_id);
135 auto* rect = request.mutable_rect();
136 rect->set_x1(x1);
137 rect->set_y1(y1);
138 rect->set_x2(x2);
139 rect->set_y2(y2);
140
141 proto::SelectTileRectResponse response;
142 grpc::Status status = stub_->SelectTileRect(&context, request, &response);
143
144 if (!status.ok()) {
145 return absl::InternalError(status.error_message());
146 }
147 if (!response.success()) {
148 return absl::InternalError(response.error());
149 }
150 return absl::OkStatus();
151#else
152 return absl::UnimplementedError("gRPC support not enabled");
153#endif
154}
155
156absl::Status CanvasAutomationClient::ClearSelection(const std::string& canvas_id) {
157#ifdef YAZE_WITH_GRPC
158 if (!stub_) return absl::FailedPreconditionError("Not connected");
159
160 grpc::ClientContext context;
161 proto::ClearSelectionRequest request;
162 request.set_canvas_id(canvas_id);
163
164 proto::ClearSelectionResponse response;
165 grpc::Status status = stub_->ClearSelection(&context, request, &response);
166
167 if (!status.ok()) {
168 return absl::InternalError(status.error_message());
169 }
170 if (!response.success()) {
171 // ClearSelection usually succeeds even if nothing selected, but respect error
172 // return absl::InternalError(response.error());
173 // Note: response message doesn't have error field in proto definition for ClearSelectionResponse?
174 // Checking proto... yes it does: bool success = 1;
175 // Wait, proto def:
176 // message ClearSelectionResponse { bool success = 1; }
177 // It doesn't have error string. My bad.
178 if (!response.success()) return absl::InternalError("ClearSelection failed");
179 }
180 return absl::OkStatus();
181#else
182 return absl::UnimplementedError("gRPC support not enabled");
183#endif
184}
185
186absl::Status CanvasAutomationClient::ScrollToTile(const std::string& canvas_id, int x, int y, bool center) {
187#ifdef YAZE_WITH_GRPC
188 if (!stub_) return absl::FailedPreconditionError("Not connected");
189
190 grpc::ClientContext context;
191 proto::ScrollToTileRequest request;
192 request.set_canvas_id(canvas_id);
193 request.set_x(x);
194 request.set_y(y);
195 request.set_center(center);
196
197 proto::ScrollToTileResponse response;
198 grpc::Status status = stub_->ScrollToTile(&context, request, &response);
199
200 if (!status.ok()) {
201 return absl::InternalError(status.error_message());
202 }
203 if (!response.success()) {
204 return absl::InternalError(response.error());
205 }
206 return absl::OkStatus();
207#else
208 return absl::UnimplementedError("gRPC support not enabled");
209#endif
210}
211
212absl::Status CanvasAutomationClient::SetZoom(const std::string& canvas_id, float zoom) {
213#ifdef YAZE_WITH_GRPC
214 if (!stub_) return absl::FailedPreconditionError("Not connected");
215
216 grpc::ClientContext context;
217 proto::SetZoomRequest request;
218 request.set_canvas_id(canvas_id);
219 request.set_zoom(zoom);
220
221 proto::SetZoomResponse response;
222 grpc::Status status = stub_->SetZoom(&context, request, &response);
223
224 if (!status.ok()) {
225 return absl::InternalError(status.error_message());
226 }
227 if (!response.success()) {
228 return absl::InternalError(response.error());
229 }
230 return absl::OkStatus();
231#else
232 return absl::UnimplementedError("gRPC support not enabled");
233#endif
234}
235
236} // namespace cli
237} // namespace yaze
absl::Status SetTiles(const std::string &canvas_id, const std::vector< TileData > &tiles)
absl::Status SetZoom(const std::string &canvas_id, float zoom)
absl::Status SelectTile(const std::string &canvas_id, int x, int y)
absl::Status ClearSelection(const std::string &canvas_id)
absl::StatusOr< int > GetTile(const std::string &canvas_id, int x, int y)
absl::Status ScrollToTile(const std::string &canvas_id, int x, int y, bool center=true)
CanvasAutomationClient(const std::string &server_address)
absl::Status SelectTileRect(const std::string &canvas_id, int x1, int y1, int x2, int y2)
absl::Status SetTile(const std::string &canvas_id, int x, int y, int tile_id)