1use std::{ops::Range, path::PathBuf};
2
3use bytes_kman::prelude::*;
4use muzzman_lib::{
5 prelude::{
6 Data, ElementId, ElementInfo, Event, FileOrData, LocationId, LocationInfo, ModuleId,
7 SessionEvent, Value,
8 },
9 session::SessionError,
10 types::{Type, ID},
11};
12
13#[derive(Clone, Debug, Bytes)]
15pub enum ServerPackets {
16 LoadModule {
17 id: u128,
18 path: PathBuf,
19 },
20 RemoveModule {
21 id: u128,
22 module_id: ModuleId,
23 },
24
25 GetActionsLen {
26 id: u128,
27 },
28 GetActions {
29 id: u128,
30 range: Range<usize>,
31 },
32 RunAction {
33 id: u128,
34 module_id: ModuleId,
35 name: String,
36 data: Vec<Type>,
37 },
38
39 GetModulesLen {
40 id: u128,
41 },
42 GetModules {
43 id: u128,
44 range: Range<usize>,
45 },
46 ModuleGetName {
47 id: u128,
48 module_id: ModuleId,
49 },
50 ModuleSetName {
51 id: u128,
52 module_id: ModuleId,
53 to: String,
54 },
55 ModuleGetDefaultName {
56 id: u128,
57 module_id: ModuleId,
58 },
59 ModuleGetDesc {
60 id: u128,
61 module_id: ModuleId,
62 },
63 ModuleSetDesc {
64 id: u128,
65 module_id: ModuleId,
66 to: String,
67 },
68 ModuleGetDefaultDesc {
69 id: u128,
70 module_id: ModuleId,
71 },
72 ModuleGetProxy {
73 id: u128,
74 module_id: ModuleId,
75 },
76 ModuleSetProxy {
77 id: u128,
78 module_id: ModuleId,
79 to: usize,
80 },
81 ModuleGetSettings {
82 id: u128,
83 module_id: ModuleId,
84 },
85 ModuleSetSettings {
86 id: u128,
87 module_id: ModuleId,
88 to: Data,
89 },
90
91 ModuleGetElementSettings {
92 id: u128,
93 module_id: ModuleId,
94 },
95 ModuleSetElementSettings {
96 id: u128,
97 module_id: ModuleId,
98 to: Data,
99 },
100 ModuleInitLocation {
101 id: u128,
102 module_id: ModuleId,
103 location_id: LocationId,
104 data: FileOrData,
105 },
106 ModuleInitElement {
107 id: u128,
108 module_id: ModuleId,
109 element_id: ElementId,
110 },
111 ModuleAcceptUrl {
112 id: u128,
113 module_id: ModuleId,
114 url: String,
115 },
116 ModuleAcceptExtension {
117 id: u128,
118 module_id: ModuleId,
119 filename: String,
120 },
121 ModuleAcceptedProtocols {
122 id: u128,
123 module_id: ModuleId,
124 },
125
126 GetDefaultLocation {
127 id: u128,
128 },
129 LocationGetName {
130 id: u128,
131 from: LocationId,
132 },
133 LocationSetName {
134 id: u128,
135 from: LocationId,
136 to: String,
137 },
138 LocationGetDesc {
139 id: u128,
140 from: LocationId,
141 },
142 LocationSetDesc {
143 id: u128,
144 from: LocationId,
145 to: String,
146 },
147 LocationGetInfo {
148 id: u128,
149 from: LocationId,
150 },
151
152 CreateElement {
153 id: u128,
154 location_id: LocationId,
155 name: String,
156 },
157 MoveElement {
158 id: u128,
159 element_id: ElementId,
160 location_id: LocationId,
161 },
162 DestroyElement {
163 id: u128,
164 element_id: ElementId,
165 },
166
167 ElementGetName {
168 id: u128,
169 element_id: ElementId,
170 },
171 ElementSetName {
172 id: u128,
173 element_id: ElementId,
174 to: String,
175 },
176 ElementGetDesc {
177 id: u128,
178 element_id: ElementId,
179 },
180 ElementSetDesc {
181 id: u128,
182 element_id: ElementId,
183 to: String,
184 },
185 ElementGetMeta {
186 id: u128,
187 element_id: ElementId,
188 },
189 ElementSetMeta {
190 id: u128,
191 element_id: ElementId,
192 to: String,
193 },
194 ElementGetUrl {
195 id: u128,
196 element_id: ElementId,
197 },
198 ElementSetUrl {
199 id: u128,
200 element_id: ElementId,
201 to: Option<String>,
202 },
203
204 ElementGetElementData {
205 id: u128,
206 element_id: ElementId,
207 },
208 ElementSetElementData {
209 id: u128,
210 element_id: ElementId,
211 to: Data,
212 },
213 ElementGetModuleData {
214 id: u128,
215 element_id: ElementId,
216 },
217 ElementSetModuleData {
218 id: u128,
219 element_id: ElementId,
220 to: Data,
221 },
222 ElementGetModule {
223 id: u128,
224 element_id: ElementId,
225 },
226 ElementSetModule {
227 id: u128,
228 element_id: ElementId,
229 module: Option<ModuleId>,
230 },
231 ElementGetStatuses {
232 id: u128,
233 element_id: ElementId,
234 },
235 ElementSetStatuses {
236 id: u128,
237 element_id: ElementId,
238 to: Vec<String>,
239 },
240 ElementGetStatus {
241 id: u128,
242 element_id: ElementId,
243 },
244 ElementSetStatus {
245 id: u128,
246 element_id: ElementId,
247 to: usize,
248 },
249 ElementGetData {
250 id: u128,
251 element_id: ElementId,
252 },
253 ElementSetData {
254 id: u128,
255 element_id: ElementId,
256 to: FileOrData,
257 },
258 ElementGetProgress {
259 id: u128,
260 element_id: ElementId,
261 },
262 ElementSetProgress {
263 id: u128,
264 element_id: ElementId,
265 to: f32,
266 },
267 ElementGetShouldSave {
268 id: u128,
269 element_id: ElementId,
270 },
271 ElementSetShouldSave {
272 id: u128,
273 element_id: ElementId,
274 to: bool,
275 },
276 ElementGetEnabled {
277 id: u128,
278 element_id: ElementId,
279 },
280 ElementSetEnabled {
281 id: u128,
282 element_id: ElementId,
283 to: bool,
284 },
285 ElementResolvModule {
286 id: u128,
287 element_id: ElementId,
288 },
289 ElementWait {
290 id: u128,
291 element_id: ElementId,
292 },
293 ElementGetInfo {
294 id: u128,
295 element_id: ElementId,
296 },
297 ElementNotify {
298 id: u128,
299 element_id: ElementId,
300 event: Event,
301 },
302 ElementEmit {
303 id: u128,
304 element_id: ElementId,
305 event: Event,
306 },
307 ElementSubscribe {
308 id: u128,
309 element_id: ElementId,
310 to: ID,
311 },
312 ElementUnSubscribe {
313 id: u128,
314 element_id: ElementId,
315 to: ID,
316 },
317
318 CreateLocation {
319 id: u128,
320 name: String,
321 location_id: LocationId,
322 },
323 GetLocationsLen {
324 id: u128,
325 location_id: LocationId,
326 },
327 GetLocations {
328 id: u128,
329 location_id: LocationId,
330 range: Range<usize>,
331 },
332 DestroyLocation {
333 id: u128,
334 location_id: LocationId,
335 },
336 MoveLocation {
337 id: u128,
338 location_id: LocationId,
339 to: LocationId,
340 },
341 LocationGetPath {
342 id: u128,
343 location_id: LocationId,
344 },
345 LocationSetPath {
346 id: u128,
347 location_id: LocationId,
348 to: PathBuf,
349 },
350 LocationGetShouldSave {
351 id: u128,
352 location_id: LocationId,
353 },
354 LocationSetShouldSave {
355 id: u128,
356 location_id: LocationId,
357 to: bool,
358 },
359 LocationGetElementsLen {
360 id: u128,
361 location_id: LocationId,
362 },
363 LocationGetElements {
364 id: u128,
365 location_id: LocationId,
366 range: Range<usize>,
367 },
368 LocationNotify {
369 id: u128,
370 location_id: LocationId,
371 event: Event,
372 },
373 LocationEmit {
374 id: u128,
375 location_id: LocationId,
376 event: Event,
377 },
378 LocationSubscribe {
379 id: u128,
380 location_id: LocationId,
381 to: ID,
382 },
383 LocationUnSubscribe {
384 id: u128,
385 location_id: LocationId,
386 to: ID,
387 },
388
389 Tick,
390}
391
392pub type Actions = Vec<(String, ModuleId, Vec<(String, Value)>)>;
393
394#[derive(Clone, Debug, Bytes)]
396pub enum ClientPackets {
397 LoadModule(u128, Result<ModuleId, SessionError>),
398 RemoveModule(u128, Result<(), SessionError>),
399
400 GetActionsLen(u128, Result<usize, SessionError>),
401 GetActions(u128, Result<Actions, SessionError>),
402 RunAction(u128, Result<(), SessionError>),
403
404 GetModulesLen(u128, Result<usize, SessionError>),
405 GetModules(u128, Result<Vec<ModuleId>, SessionError>),
406 ModuleGetName(u128, Result<String, SessionError>),
407 ModuleSetName(u128, Result<(), SessionError>),
408 ModuleGetDefaultName(u128, Result<String, SessionError>),
409 ModuleGetDesc(u128, Result<String, SessionError>),
410 ModuleSetDesc(u128, Result<(), SessionError>),
411 ModuleGetDefaultDesc(u128, Result<String, SessionError>),
412 ModuleGetProxy(u128, Result<usize, SessionError>),
413 ModuleSetProxy(u128, Result<(), SessionError>),
414 ModuleGetSettings(u128, Box<Result<Data, SessionError>>),
415 ModuleSetSettings(u128, Result<(), SessionError>),
416 ModuleGetElementSettings(u128, Result<Data, SessionError>),
417 ModuleSetElementSettings(u128, Result<(), SessionError>),
418 ModuleInitLocation(u128, Result<(), SessionError>),
419 ModuleInitElement(u128, Result<(), SessionError>),
420 ModuleAcceptUrl(u128, Result<bool, SessionError>),
421 ModuleAcceptExtension(u128, Result<bool, SessionError>),
422 ModuleAcceptedProtocols(u128, Result<Vec<String>, SessionError>),
423
424 CreateLocation(u128, Result<LocationId, SessionError>),
425 GetLocationsLen(u128, Result<usize, SessionError>),
426 GetLocations(u128, Result<Vec<LocationId>, SessionError>),
427 DestroyLocation(u128, Result<(), SessionError>),
428 MoveLocation(u128, Result<(), SessionError>),
429 GetDefaultLocation(u128, Result<LocationId, SessionError>),
430 LocationGetName(u128, Result<String, SessionError>),
431 LocationSetName(u128, Result<(), SessionError>),
432 LocationGetDesc(u128, Result<String, SessionError>),
433 LocationSetDesc(u128, Result<(), SessionError>),
434 LocationGetInfo(u128, Result<LocationInfo, SessionError>),
435 LocationGetPath(u128, Result<PathBuf, SessionError>),
436 LocationSetPath(u128, Result<(), SessionError>),
437 LocationGetShouldSave(u128, Result<bool, SessionError>),
438 LocationSetShouldSave(u128, Result<(), SessionError>),
439 LocationGetElementsLen(u128, Result<usize, SessionError>),
440 LocationGetElements(u128, Result<Vec<ElementId>, SessionError>),
441 LocationNotify(u128, Result<(), SessionError>),
442 LocationEmit(u128, Result<(), SessionError>),
443 LocationSubscribe(u128, Result<(), SessionError>),
444 LocationUnSubscribe(u128, Result<(), SessionError>),
445
446 CreateElement(u128, Result<ElementId, SessionError>),
447 MoveElement(u128, Result<(), SessionError>),
448 DestroyElement(u128, Result<(), SessionError>),
449 ElementGetName(u128, Result<String, SessionError>),
450 ElementSetName(u128, Result<(), SessionError>),
451 ElementGetDesc(u128, Result<String, SessionError>),
452 ElementSetDesc(u128, Result<(), SessionError>),
453 ElementGetMeta(u128, Result<String, SessionError>),
454 ElementSetMeta(u128, Result<(), SessionError>),
455 ElementGetUrl(u128, Result<Option<String>, SessionError>),
456 ElementSetUrl(u128, Result<(), SessionError>),
457 ElementGetElementData(u128, Result<Data, SessionError>),
458 ElementSetElementData(u128, Result<(), SessionError>),
459 ElementGetModuleData(u128, Result<Data, SessionError>),
460 ElementSetModuleData(u128, Result<(), SessionError>),
461 ElementGetModule(u128, Result<Option<ModuleId>, SessionError>),
462 ElementSetModule(u128, Result<(), SessionError>),
463 ElementGetStatuses(u128, Result<Vec<String>, SessionError>),
464 ElementSetStatuses(u128, Result<(), SessionError>),
465 ElementGetStatus(u128, Result<usize, SessionError>),
466 ElementSetStatus(u128, Result<(), SessionError>),
467 ElementGetData(u128, Result<FileOrData, SessionError>),
468 ElementSetData(u128, Result<(), SessionError>),
469 ElementGetProgress(u128, Result<f32, SessionError>),
470 ElementSetProgress(u128, Result<(), SessionError>),
471 ElementGetShouldSave(u128, Result<bool, SessionError>),
472 ElementSetShouldSave(u128, Result<(), SessionError>),
473 ElementGetEnabled(u128, Result<bool, SessionError>),
474 ElementSetEnabled(u128, Result<(), SessionError>),
475 ElementResolvModule(u128, Result<bool, SessionError>),
476 ElementWait(u128, Result<(), SessionError>),
477 ElementGetInfo(u128, Box<Result<ElementInfo, SessionError>>),
478 ElementNotify(u128, Result<(), SessionError>),
479 ElementEmit(u128, Result<(), SessionError>),
480 ElementSubscribe(u128, Result<(), SessionError>),
481 ElementUnSubscribe(u128, Result<(), SessionError>),
482
483 NewSessionEvent(SessionEvent),
484}
485
486impl ClientPackets {
487 pub fn id(&self) -> u128 {
488 match self {
489 ClientPackets::GetDefaultLocation(id, _) => *id,
490 ClientPackets::LocationGetName(id, _) => *id,
491 ClientPackets::LocationSetName(id, _) => *id,
492 ClientPackets::LocationGetDesc(id, _) => *id,
493 ClientPackets::LocationSetDesc(id, _) => *id,
494 ClientPackets::LocationGetInfo(id, _) => *id,
495 ClientPackets::CreateElement(id, _) => *id,
496 ClientPackets::ElementGetName(id, _) => *id,
497 ClientPackets::ElementSetName(id, _) => *id,
498 ClientPackets::ElementGetDesc(id, _) => *id,
499 ClientPackets::ElementSetDesc(id, _) => *id,
500 ClientPackets::ElementGetMeta(id, _) => *id,
501 ClientPackets::ElementSetMeta(id, _) => *id,
502 ClientPackets::ElementGetInfo(id, _) => *id,
503 ClientPackets::LoadModule(id, _) => *id,
504 ClientPackets::RemoveModule(id, _) => *id,
505 ClientPackets::GetActionsLen(id, _) => *id,
506 ClientPackets::GetActions(id, _) => *id,
507 ClientPackets::RunAction(id, _) => *id,
508 ClientPackets::GetModulesLen(id, _) => *id,
509 ClientPackets::GetModules(id, _) => *id,
510 ClientPackets::ModuleGetName(id, _) => *id,
511 ClientPackets::ModuleSetName(id, _) => *id,
512 ClientPackets::ModuleGetDefaultName(id, _) => *id,
513 ClientPackets::ModuleGetDesc(id, _) => *id,
514 ClientPackets::ModuleSetDesc(id, _) => *id,
515 ClientPackets::ModuleGetDefaultDesc(id, _) => *id,
516 ClientPackets::ModuleGetProxy(id, _) => *id,
517 ClientPackets::ModuleSetProxy(id, _) => *id,
518 ClientPackets::ModuleGetSettings(id, _) => *id,
519 ClientPackets::ModuleSetSettings(id, _) => *id,
520 ClientPackets::ModuleGetElementSettings(id, _) => *id,
521 ClientPackets::ModuleSetElementSettings(id, _) => *id,
522 ClientPackets::ModuleInitLocation(id, _) => *id,
523 ClientPackets::ModuleInitElement(id, _) => *id,
524 ClientPackets::ModuleAcceptUrl(id, _) => *id,
525 ClientPackets::ModuleAcceptExtension(id, _) => *id,
526 ClientPackets::MoveElement(id, _) => *id,
527 ClientPackets::DestroyElement(id, _) => *id,
528 ClientPackets::ElementGetElementData(id, _) => *id,
529 ClientPackets::ElementSetElementData(id, _) => *id,
530 ClientPackets::ElementGetModuleData(id, _) => *id,
531 ClientPackets::ElementSetModuleData(id, _) => *id,
532 ClientPackets::ElementGetModule(id, _) => *id,
533 ClientPackets::ElementSetModule(id, _) => *id,
534 ClientPackets::ElementGetStatuses(id, _) => *id,
535 ClientPackets::ElementSetStatuses(id, _) => *id,
536 ClientPackets::ElementGetStatus(id, _) => *id,
537 ClientPackets::ElementSetStatus(id, _) => *id,
538 ClientPackets::ElementGetData(id, _) => *id,
539 ClientPackets::ElementSetData(id, _) => *id,
540 ClientPackets::ElementGetProgress(id, _) => *id,
541 ClientPackets::ElementSetProgress(id, _) => *id,
542 ClientPackets::ElementGetShouldSave(id, _) => *id,
543 ClientPackets::ElementSetShouldSave(id, _) => *id,
544 ClientPackets::ElementSetEnabled(id, _) => *id,
545 ClientPackets::ElementGetEnabled(id, _) => *id,
546 ClientPackets::ElementResolvModule(id, _) => *id,
547 ClientPackets::ElementWait(id, _) => *id,
548 ClientPackets::ElementNotify(id, _) => *id,
549 ClientPackets::ElementEmit(id, _) => *id,
550 ClientPackets::ElementSubscribe(id, _) => *id,
551 ClientPackets::ElementUnSubscribe(id, _) => *id,
552 ClientPackets::CreateLocation(id, _) => *id,
553 ClientPackets::GetLocationsLen(id, _) => *id,
554 ClientPackets::GetLocations(id, _) => *id,
555 ClientPackets::DestroyLocation(id, _) => *id,
556 ClientPackets::MoveLocation(id, _) => *id,
557 ClientPackets::LocationGetPath(id, _) => *id,
558 ClientPackets::LocationSetPath(id, _) => *id,
559 ClientPackets::LocationGetShouldSave(id, _) => *id,
560 ClientPackets::LocationSetShouldSave(id, _) => *id,
561 ClientPackets::LocationGetElementsLen(id, _) => *id,
562 ClientPackets::LocationGetElements(id, _) => *id,
563 ClientPackets::LocationNotify(id, _) => *id,
564 ClientPackets::LocationEmit(id, _) => *id,
565 ClientPackets::LocationSubscribe(id, _) => *id,
566 ClientPackets::LocationUnSubscribe(id, _) => *id,
567 ClientPackets::ModuleAcceptedProtocols(id, _) => *id,
568 ClientPackets::ElementGetUrl(id, _) => *id,
569 ClientPackets::ElementSetUrl(id, _) => *id,
570 ClientPackets::NewSessionEvent(_) => 0,
571 }
572 }
573}