mpc_protocol/event.rs
1use crate::{MeetingState, Result, SessionId, SessionState};
2/// Events dispatched by the event loop stream.
3#[derive(Debug)]
4pub enum Event {
5 /// Event dispatched when a handshake with the server
6 /// is completed.
7 ServerConnected {
8 /// Public key of the server.
9 server_key: Vec<u8>,
10 },
11 /// Event dispatched when a handshake with a peer
12 /// has been completed.
13 PeerConnected {
14 /// Public key of the peer.
15 peer_key: Vec<u8>,
16 },
17 /// Binary message received from a peer.
18 BinaryMessage {
19 /// Public key of the peer.
20 peer_key: Vec<u8>,
21 /// Message buffer.
22 message: Vec<u8>,
23 /// Session identifier.
24 session_id: Option<SessionId>,
25 },
26 /// JSON message received from a peer.
27 JsonMessage {
28 /// Public key of the peer.
29 peer_key: Vec<u8>,
30 /// JSON message.
31 message: JsonMessage,
32 /// Session identifier.
33 session_id: Option<SessionId>,
34 },
35
36 /// Event dispatched when a meeting has been created.
37 MeetingCreated(MeetingState),
38
39 /// Event dispatched when a meeting is ready.
40 ///
41 /// A meeting is ready when the limit for the meeting point
42 /// has been reached.
43 MeetingReady(MeetingState),
44
45 /// Event dispatched when a session has been created.
46 SessionCreated(SessionState),
47
48 /// Event dispatched when a session is ready.
49 ///
50 /// A session is ready when all participants
51 /// have completed the server handshake.
52 ///
53 /// Peers can now handshake with each other.
54 SessionReady(SessionState),
55
56 /// Event dispatched when a session is active.
57 ///
58 /// A session is active when all the participants
59 /// have connected to each other.
60 SessionActive(SessionState),
61
62 /// Event dispatched when a session timed out waiting
63 /// for all the participants.
64 SessionTimeout(SessionId),
65
66 /// Event dispatched when a session has been finished.
67 ///
68 /// A session can only be finished when the session owner
69 /// explicitly closes the session.
70 SessionFinished(SessionId),
71
72 /// Event dispatched when the socket is closed.
73 Close,
74}
75
76/// JSON message received from a peer.
77#[derive(Debug)]
78pub struct JsonMessage {
79 contents: Vec<u8>,
80}
81
82impl From<Vec<u8>> for JsonMessage {
83 fn from(contents: Vec<u8>) -> Self {
84 Self { contents }
85 }
86}
87
88impl JsonMessage {
89 /// Serialize a message.
90 pub fn serialize<T: serde::ser::Serialize>(
91 value: &T,
92 ) -> Result<Vec<u8>> {
93 Ok(serde_json::to_vec(value)?)
94 }
95
96 /// Deserialize this message.
97 pub fn deserialize<'a, T: serde::de::Deserialize<'a>>(
98 &'a self,
99 ) -> Result<T> {
100 Ok(serde_json::from_slice::<T>(&self.contents)?)
101 }
102}