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}