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}