Skip to main content

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;
10pub mod namespace;
11mod request;
12pub mod request_adapters;
13mod runtime;
14
15#[cfg(feature = "tower")]
16use crate::request_adapters::tower::layer::WsIoServerLayer;
17use crate::{
18    builder::WsIoServerBuilder,
19    namespace::{
20        WsIoServerNamespace,
21        builder::WsIoServerNamespaceBuilder,
22    },
23    runtime::WsIoServerRuntime,
24};
25
26// Structs
27#[derive(Clone)]
28pub struct WsIoServer(Arc<WsIoServerRuntime>);
29
30impl WsIoServer {
31    // Public methods
32    pub fn builder() -> WsIoServerBuilder {
33        WsIoServerBuilder::new()
34    }
35
36    pub async fn close_all(&self) {
37        self.0.close_all().await
38    }
39
40    #[inline]
41    pub fn connection_count(&self) -> usize {
42        self.0.connection_count()
43    }
44
45    pub async fn disconnect_all(&self) {
46        self.0.disconnect_all().await
47    }
48
49    pub async fn emit<D: Serialize>(&self, event: impl AsRef<str>, data: Option<&D>) -> Result<()> {
50        self.0.emit(event.as_ref(), data).await
51    }
52
53    #[cfg(feature = "tower")]
54    pub fn layer(&self) -> WsIoServerLayer {
55        WsIoServerLayer::new(self.0.clone())
56    }
57
58    #[inline]
59    pub fn of(&self, path: impl AsRef<str>) -> Option<Arc<WsIoServerNamespace>> {
60        self.0.get_namespace(path.as_ref())
61    }
62
63    #[inline]
64    pub fn namespace_count(&self) -> usize {
65        self.0.namespace_count()
66    }
67
68    #[inline]
69    pub fn new_namespace_builder(&self, path: impl AsRef<str>) -> Result<WsIoServerNamespaceBuilder> {
70        self.0.new_namespace_builder(path.as_ref())
71    }
72
73    pub async fn remove_namespace(&self, path: impl AsRef<str>) {
74        self.0.remove_namespace(path.as_ref()).await
75    }
76
77    pub async fn shutdown(&self) {
78        self.0.shutdown().await
79    }
80}