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}