Skip to main content

mip_client/client/
events.rs

1use std::sync::Arc;
2
3use crate::protocol::header::Header;
4use super::types::{MIPError, MIPMessage};
5
6// ============================================================================
7// Callback Type Aliases
8// ============================================================================
9
10/// Callback invoked when connected to the server
11pub type OnConnect = Arc<dyn Fn() + Send + Sync>;
12
13/// Callback invoked when disconnected from the server
14pub type OnDisconnect = Arc<dyn Fn() + Send + Sync>;
15
16/// Callback invoked on reconnection attempt (receives attempt number)
17pub type OnReconnecting = Arc<dyn Fn(u32) + Send + Sync>;
18
19/// Callback invoked when a message is received
20pub type OnMessage = Arc<dyn Fn(MIPMessage) + Send + Sync>;
21
22/// Callback invoked when an event frame is received
23pub type OnEvent = Arc<dyn Fn(MIPMessage) + Send + Sync>;
24
25/// Callback invoked when an ACK is received (receives message ID)
26pub type OnAck = Arc<dyn Fn(u64) + Send + Sync>;
27
28/// Callback invoked when a PONG is received
29pub type OnPong = Arc<dyn Fn() + Send + Sync>;
30
31/// Callback invoked on error
32pub type OnError = Arc<dyn Fn(MIPError) + Send + Sync>;
33
34/// Callback invoked for every raw frame (receives header and payload)
35pub type OnFrame = Arc<dyn Fn(Header, Vec<u8>) + Send + Sync>;
36
37// ============================================================================
38// Callbacks Container
39// ============================================================================
40
41/// Container for all registered callbacks
42pub(crate) struct Callbacks {
43    pub on_connect: Vec<OnConnect>,
44    pub on_disconnect: Vec<OnDisconnect>,
45    pub on_reconnecting: Vec<OnReconnecting>,
46    pub on_message: Vec<OnMessage>,
47    pub on_event: Vec<OnEvent>,
48    pub on_ack: Vec<OnAck>,
49    pub on_pong: Vec<OnPong>,
50    pub on_error: Vec<OnError>,
51    pub on_frame: Vec<OnFrame>,
52}
53
54impl Default for Callbacks {
55    fn default() -> Self {
56        Self {
57            on_connect: Vec::new(),
58            on_disconnect: Vec::new(),
59            on_reconnecting: Vec::new(),
60            on_message: Vec::new(),
61            on_event: Vec::new(),
62            on_ack: Vec::new(),
63            on_pong: Vec::new(),
64            on_error: Vec::new(),
65            on_frame: Vec::new(),
66        }
67    }
68}