deribit_websocket/session/
ws_session.rs1use crate::config::WebSocketConfig;
4use crate::model::ConnectionState;
5use crate::model::subscription::SubscriptionManager;
6use std::sync::Arc;
7use tokio::sync::Mutex;
8
9#[derive(Debug)]
11pub struct WebSocketSession {
12 config: Arc<WebSocketConfig>,
13 state: Arc<Mutex<ConnectionState>>,
14 subscription_manager: Arc<Mutex<SubscriptionManager>>,
15}
16
17impl WebSocketSession {
18 pub fn new(
29 config: impl Into<Arc<WebSocketConfig>>,
30 subscription_manager: Arc<Mutex<SubscriptionManager>>,
31 ) -> Self {
32 Self {
33 config: config.into(),
34 state: Arc::new(Mutex::new(ConnectionState::Disconnected)),
35 subscription_manager,
36 }
37 }
38
39 pub async fn state(&self) -> ConnectionState {
41 self.state.lock().await.clone()
42 }
43
44 pub async fn set_state(&self, new_state: ConnectionState) {
46 *self.state.lock().await = new_state;
47 }
48
49 pub fn config(&self) -> &WebSocketConfig {
51 &self.config
52 }
53
54 pub fn subscription_manager(&self) -> Arc<Mutex<SubscriptionManager>> {
56 Arc::clone(&self.subscription_manager)
57 }
58
59 pub async fn is_connected(&self) -> bool {
61 matches!(
62 *self.state.lock().await,
63 ConnectionState::Connected | ConnectionState::Authenticated
64 )
65 }
66
67 pub async fn is_authenticated(&self) -> bool {
69 matches!(*self.state.lock().await, ConnectionState::Authenticated)
70 }
71
72 pub async fn mark_authenticated(&self) {
74 self.set_state(ConnectionState::Authenticated).await;
75 }
76
77 pub async fn mark_disconnected(&self) {
79 self.set_state(ConnectionState::Disconnected).await;
80 self.subscription_manager.lock().await.deactivate_all();
83 }
84
85 pub async fn reactivate_subscriptions(&self) {
87 self.subscription_manager.lock().await.reactivate_all();
88 }
89}