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}