next_web_websocket/core/
ws_context.rs

1use rudi_dev::Singleton;
2use std::sync::Arc;
3
4use crate::properties::ws_properties::WebSocketProperties;
5
6use super::handler::WebSocketHandler;
7
8/// WebSocket上下文,提供WebSocket相关配置和处理器
9
10#[derive(Clone)]
11pub struct WebSocketContext {
12    properties: WebSocketProperties,
13    handlers: matchit::Router<Arc<dyn WebSocketHandler>>,
14}
15
16impl WebSocketContext {
17    ///
18    pub fn properties(&self) -> &WebSocketProperties {
19        &self.properties
20    }
21
22    /// 添加WebSocket处理器
23    pub fn add_handler(&mut self, path: &str, handler: Arc<dyn WebSocketHandler>) {
24        let _ = self.handlers.insert(path, handler);
25    }
26    
27    /// 根据路径获取处理器
28    pub fn get_handler(&self, path: &str) -> Option<&Arc<dyn WebSocketHandler>> {
29        match self.handlers.at(path) {
30            Ok(matched) => Some(matched.value),
31            Err(_) => None
32        }
33    }
34}
35
36#[Singleton]
37impl WebSocketContext {
38    #[autowired]
39    fn private_constructor(#[autowired] properties: WebSocketProperties) -> Self {
40        Self {
41            properties,
42            handlers: matchit::Router::new(),
43        }
44    }
45}