wsio_server/
lib.rs

1use std::sync::Arc;
2
3use anyhow::Result;
4use serde::Serialize;
5pub use wsio_core as core;
6
7mod builder;
8mod config;
9pub mod connection;
10mod layer;
11mod namespace;
12mod runtime;
13mod service;
14
15use crate::{
16    builder::WsIoServerBuilder,
17    layer::WsIoServerLayer,
18    namespace::{
19        WsIoServerNamespace,
20        builder::WsIoServerNamespaceBuilder,
21    },
22    runtime::WsIoServerRuntime,
23};
24
25#[derive(Clone)]
26pub struct WsIoServer(Arc<WsIoServerRuntime>);
27
28impl WsIoServer {
29    // Public methods
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 async fn emit<D: Serialize>(&self, event: impl Into<String>, data: Option<&D>) -> Result<()> {
40        self.0.emit(event, data).await
41    }
42
43    pub fn layer(&self) -> WsIoServerLayer {
44        WsIoServerLayer::new(self.0.clone())
45    }
46
47    #[inline]
48    pub fn of(&self, path: impl AsRef<str>) -> Option<Arc<WsIoServerNamespace>> {
49        self.0.get_namespace(path.as_ref())
50    }
51
52    #[inline]
53    pub fn namespace_count(&self) -> usize {
54        self.0.namespace_count()
55    }
56
57    #[inline]
58    pub fn new_namespace_builder(&self, path: impl AsRef<str>) -> Result<WsIoServerNamespaceBuilder> {
59        self.0.new_namespace_builder(path.as_ref())
60    }
61
62    pub async fn remove_namespace(&self, path: impl AsRef<str>) {
63        self.0.remove_namespace(path.as_ref()).await
64    }
65
66    pub async fn shutdown(&self) {
67        self.0.shutdown().await
68    }
69}