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 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}