polysig_protocol/
event.rs

1use crate::{MeetingResponse, 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: Option<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    /// Meeting room events.
37    Meeting(MeetingResponse),
38
39    /// Event dispatched when a session has been created.
40    SessionCreated(SessionState),
41
42    /// Event dispatched when a session is ready.
43    ///
44    /// A session is ready when all participants
45    /// have completed the server handshake.
46    ///
47    /// Peers can now handshake with each other.
48    SessionReady(SessionState),
49
50    /// Event dispatched when a session is active.
51    ///
52    /// A session is active when all the participants
53    /// have connected to each other.
54    SessionActive(SessionState),
55
56    /// Event dispatched when a session timed out waiting
57    /// for all the participants.
58    SessionTimeout(SessionId),
59
60    /// Event dispatched when a session has been finished.
61    ///
62    /// A session can only be finished when the session owner
63    /// explicitly closes the session.
64    SessionFinished(SessionId),
65
66    /// Event dispatched when the socket is closed.
67    Close,
68}
69
70/// JSON message received from a peer.
71#[derive(Debug)]
72pub struct JsonMessage {
73    contents: Vec<u8>,
74}
75
76impl From<Vec<u8>> for JsonMessage {
77    fn from(contents: Vec<u8>) -> Self {
78        Self { contents }
79    }
80}
81
82impl JsonMessage {
83    /// Serialize a message.
84    pub fn serialize<T: serde::ser::Serialize>(
85        value: &T,
86    ) -> Result<Vec<u8>> {
87        Ok(serde_json::to_vec(value)?)
88    }
89
90    /// Deserialize this message.
91    pub fn deserialize<'a, T: serde::de::Deserialize<'a>>(
92        &'a self,
93    ) -> Result<T> {
94        Ok(serde_json::from_slice::<T>(&self.contents)?)
95    }
96}