engineio_rs/server/
builder.rs

1use std::sync::Arc;
2
3use tokio::sync::{mpsc::channel, Mutex};
4
5use crate::server::{server::ServerInner, Server, ServerOption};
6
7pub struct ServerBuilder {
8    port: u16,
9    server_option: ServerOption,
10    polling_buffer: usize,
11    event_size: usize,
12}
13
14impl ServerBuilder {
15    pub fn new(port: u16) -> Self {
16        Self {
17            port,
18            server_option: Default::default(),
19            polling_buffer: 100,
20            event_size: 1000,
21        }
22    }
23
24    pub fn server_option(mut self, server_option: ServerOption) -> Self {
25        self.server_option = server_option;
26        self
27    }
28
29    pub fn polling_buffer(mut self, polling_buffer: usize) -> Self {
30        self.polling_buffer = polling_buffer;
31        self
32    }
33
34    pub fn event_size(mut self, event_size: usize) -> Self {
35        self.event_size = event_size;
36        self
37    }
38
39    pub fn build(self) -> Server {
40        let (event_tx, event_rx) = channel(self.event_size);
41        Server {
42            inner: Arc::new(ServerInner {
43                port: self.port,
44                server_option: self.server_option,
45                id_generator: Default::default(),
46                sockets: Default::default(),
47                polling_handles: Default::default(),
48                polling_buffer: self.polling_buffer,
49                event_tx: Arc::new(event_tx),
50                event_rx: Arc::new(Mutex::new(event_rx)),
51            }),
52        }
53    }
54}