socketio_rs/server/
builder.rs1use crate::server::server::Server;
2use crate::{callback::Callback, server::client::Client};
3use crate::{AckId, NameSpace};
4use crate::{Event, Payload};
5use dashmap::DashMap;
6use engineio_rs::{ServerBuilder as EngineServerBuilder, ServerOption};
7use futures_util::future::BoxFuture;
8use std::{collections::HashMap, sync::Arc};
9
10#[allow(dead_code)]
11pub struct ServerBuilder {
12 server_option: ServerOption,
13 on: HashMap<NameSpace, DashMap<Event, Callback<Client>>>,
14 builder: EngineServerBuilder,
15}
16
17#[allow(dead_code)]
18impl ServerBuilder {
19 pub fn new(port: u16) -> Self {
20 Self {
21 builder: EngineServerBuilder::new(port),
22 server_option: Default::default(),
23 on: Default::default(),
24 }
25 }
26
27 pub fn server_option(mut self, server_option: ServerOption) -> Self {
28 self.builder = self.builder.server_option(server_option);
29 self
30 }
31
32 pub fn on<S: Into<String>, T: Into<Event>, F>(
33 mut self,
34 namespace: S,
35 event: T,
36 callback: F,
37 ) -> Self
38 where
39 F: for<'a> std::ops::FnMut(
40 Option<Payload>,
41 Client,
42 Option<AckId>,
43 ) -> BoxFuture<'static, ()>
44 + 'static
45 + Send
46 + Sync,
47 {
48 let namespace = namespace.into();
49 if let Some(on) = self.on.get_mut(&namespace) {
50 on.insert(event.into(), Callback::new(callback));
51 } else {
52 let on = DashMap::new();
53 on.insert(event.into(), Callback::new(callback));
54 self.on.insert(namespace, on);
55 }
56 self
57 }
58
59 pub fn build(self) -> Arc<Server> {
60 let engine_server = self.builder.build();
61 let on = DashMap::new();
62
63 for (k, v) in self.on.into_iter() {
64 on.insert(k, Arc::new(v));
65 }
66
67 Arc::new(Server {
68 on,
69 engine_server,
70 rooms: Default::default(),
71 clients: Default::default(),
72 sid_generator: Default::default(),
73 })
74 }
75}