diff options
| author | Fuwn <[email protected]> | 2021-05-06 00:31:08 +0000 |
|---|---|---|
| committer | Fuwn <[email protected]> | 2021-05-06 00:31:08 +0000 |
| commit | b3ee830a430e00dc8ab8f7a10ebaf1e7c931a0ad (patch) | |
| tree | fe6f5457049d0744d21cd142571662787f71eb6f /src/server | |
| parent | perf(subs): clippy (diff) | |
| download | whirl-b3ee830a430e00dc8ab8f7a10ebaf1e7c931a0ad.tar.xz whirl-b3ee830a430e00dc8ab8f7a10ebaf1e7c931a0ad.zip | |
refactor(server): clippy: module inception
Diffstat (limited to 'src/server')
| -rw-r--r-- | src/server/distributor.rs | 2 | ||||
| -rw-r--r-- | src/server/hub.rs | 2 | ||||
| -rw-r--r-- | src/server/mod.rs | 59 | ||||
| -rw-r--r-- | src/server/server.rs | 60 |
4 files changed, 60 insertions, 63 deletions
diff --git a/src/server/distributor.rs b/src/server/distributor.rs index cc8cfac..e84afeb 100644 --- a/src/server/distributor.rs +++ b/src/server/distributor.rs @@ -38,7 +38,7 @@ use crate::{ interaction::{peer::Peer, shared::Shared}, net::{constants::VAR_USERNAME, property_parser::parse_network_property}, packet_parser::parse_commands_from_packet, - server::Server, + Server, }, }; diff --git a/src/server/hub.rs b/src/server/hub.rs index 9c9909e..b2b176e 100644 --- a/src/server/hub.rs +++ b/src/server/hub.rs @@ -35,7 +35,7 @@ use crate::{ interaction::{peer::Peer, shared::Shared}, net::{constants::VAR_USERNAME, property_parser::parse_network_property}, packet_parser::parse_commands_from_packet, - server::Server, + Server, }, }; diff --git a/src/server/mod.rs b/src/server/mod.rs index 369cb38..1f986c5 100644 --- a/src/server/mod.rs +++ b/src/server/mod.rs @@ -8,5 +8,62 @@ pub mod net; pub mod distributor; pub mod hub; mod packet_parser; -pub mod server; mod types; + +use std::{error::Error, fmt, net::SocketAddr, sync::Arc}; + +use tokio::{ + net::{TcpListener, TcpStream}, + sync::Mutex, +}; + +use crate::server::interaction::shared::Shared; + +#[derive(Debug)] +pub enum ServerType { + AnonRoomServer, + AnonUserServer, + AutoServer, + RoomServer, + UserServer, +} +// https://stackoverflow.com/a/32712140/14452787 +impl fmt::Display for ServerType { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{:?}", self) } +} + +#[async_trait::async_trait] +pub trait Server { + async fn listen(address: &str, server_type: ServerType) -> Result<(), Box<dyn Error>> { + let listener = TcpListener::bind(address).await?; + let state = Arc::new(Mutex::new(Shared::new())); + let mut counter = 0; + + info!( + "server of type {} now listening at {}", + server_type.to_string(), + address + ); + + loop { + let (stream, address) = listener.accept().await?; + counter += 1; + let state = Arc::clone(&state); + + trace!("accepted client at {}", address); + + tokio::spawn(async move { + if let Err(e) = Self::handle(state, stream, address, counter).await { + error!("an error occurred: {}", e); + } + }); + } + } + + async fn handle( + state: Arc<Mutex<Shared>>, + stream: TcpStream, + _address: SocketAddr, + count: usize, + ) -> Result<(), Box<dyn Error>>; +} diff --git a/src/server/server.rs b/src/server/server.rs deleted file mode 100644 index 1be6faa..0000000 --- a/src/server/server.rs +++ /dev/null @@ -1,60 +0,0 @@ -// Copyleft (ɔ) 2021-2021 The Whirlsplash Collective -// SPDX-License-Identifier: GPL-3.0-only - -use std::{error::Error, fmt, net::SocketAddr, sync::Arc}; - -use tokio::{ - net::{TcpListener, TcpStream}, - sync::Mutex, -}; - -use crate::server::interaction::shared::Shared; - -#[derive(Debug)] -pub enum ServerType { - AnonRoomServer, - AnonUserServer, - AutoServer, - RoomServer, - UserServer, -} -// https://stackoverflow.com/a/32712140/14452787 -impl fmt::Display for ServerType { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { write!(f, "{:?}", self) } -} - -#[async_trait::async_trait] -pub trait Server { - async fn listen(address: &str, server_type: ServerType) -> Result<(), Box<dyn Error>> { - let listener = TcpListener::bind(address).await?; - let state = Arc::new(Mutex::new(Shared::new())); - let mut counter = 0; - - info!( - "server of type {} now listening at {}", - server_type.to_string(), - address - ); - - loop { - let (stream, address) = listener.accept().await?; - counter += 1; - let state = Arc::clone(&state); - - trace!("accepted client at {}", address); - - tokio::spawn(async move { - if let Err(e) = Self::handle(state, stream, address, counter).await { - error!("an error occurred: {}", e); - } - }); - } - } - - async fn handle( - state: Arc<Mutex<Shared>>, - stream: TcpStream, - _address: SocketAddr, - count: usize, - ) -> Result<(), Box<dyn Error>>; -} |