wsio_server/
lib.rs

1use std::sync::Arc;
2
3use anyhow::Result;
4pub use wsio_core as core;
5
6mod builder;
7mod config;
8pub mod connection;
9mod layer;
10mod namespace;
11mod runtime;
12mod service;
13mod types;
14
15use crate::{
16    builder::WsIoServerBuilder,
17    connection::WsIoServerConnection,
18    layer::WsIoServerLayer,
19    namespace::{
20        WsIoServerNamespace,
21        builder::WsIoServerNamespaceBuilder,
22    },
23    runtime::WsIoServerRuntime,
24};
25
26#[derive(Clone)]
27pub struct WsIoServer(Arc<WsIoServerRuntime>);
28
29impl WsIoServer {
30    pub fn builder() -> WsIoServerBuilder {
31        WsIoServerBuilder::new()
32    }
33
34    #[inline]
35    pub fn connection_count(&self) -> usize {
36        self.0.connection_count()
37    }
38
39    pub fn layer(&self) -> WsIoServerLayer {
40        WsIoServerLayer::new(self.0.clone())
41    }
42
43    #[inline]
44    pub fn new_namespace_builder<H, Fut>(
45        &self,
46        path: impl AsRef<str>,
47        on_connect_handler: H,
48    ) -> Result<WsIoServerNamespaceBuilder>
49    where
50        H: Fn(Arc<WsIoServerConnection>) -> Fut + Send + Sync + 'static,
51        Fut: Future<Output = Result<()>> + Send + 'static,
52    {
53        self.0.new_namespace_builder(path.as_ref(), on_connect_handler)
54    }
55
56    #[inline]
57    pub fn of(&self, path: impl AsRef<str>) -> Option<Arc<WsIoServerNamespace>> {
58        self.0.get_namespace(path.as_ref())
59    }
60}