Skip to main content

dartboard_core/
wire.rs

1use serde::{Deserialize, Serialize};
2
3use crate::canvas::Canvas;
4use crate::color::RgbColor;
5use crate::ops::CanvasOp;
6
7pub type UserId = u64;
8pub type ClientOpId = u64;
9pub type Seq = u64;
10
11#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
12pub struct Peer {
13    pub user_id: UserId,
14    pub name: String,
15    pub color: RgbColor,
16}
17
18#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
19pub enum ClientMsg {
20    Hello {
21        name: String,
22        color: RgbColor,
23    },
24    Op {
25        client_op_id: ClientOpId,
26        op: CanvasOp,
27    },
28}
29
30#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
31pub enum ServerMsg {
32    Welcome {
33        your_user_id: UserId,
34        your_color: RgbColor,
35        peers: Vec<Peer>,
36        snapshot: Canvas,
37    },
38    ConnectRejected {
39        reason: String,
40    },
41    Ack {
42        client_op_id: ClientOpId,
43        seq: Seq,
44    },
45    OpBroadcast {
46        from: UserId,
47        op: CanvasOp,
48        seq: Seq,
49    },
50    PeerJoined {
51        peer: Peer,
52    },
53    PeerLeft {
54        user_id: UserId,
55    },
56    Reject {
57        client_op_id: ClientOpId,
58        reason: String,
59    },
60}