diff options
Diffstat (limited to 'game_server/src/gameserver.rs')
-rw-r--r-- | game_server/src/gameserver.rs | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/game_server/src/gameserver.rs b/game_server/src/gameserver.rs new file mode 100644 index 0000000..6bc3e07 --- /dev/null +++ b/game_server/src/gameserver.rs @@ -0,0 +1,44 @@ +use websocket::{OwnedMessage, sync::Server, server::NoTlsAcceptor}; +use std::net::{SocketAddr, ToSocketAddrs}; +use std::sync::mpsc; +use std::sync::mpsc::{Sender, Receiver}; + +#[derive(Debug)] +pub enum GameServerError { + BindError(std::io::Error), +} + +type ClientConnection = Result<(), GameServerError>; + +pub struct GameServer { + addr: SocketAddr, + rec: Receiver<ClientConnection>, +} + +impl GameServer { + pub fn new<T: ToSocketAddrs>(addr: T) -> Self { + let (s, r): (Sender<ClientConnection>, Receiver<ClientConnection>) + = mpsc::channel(); + let addr = addr.to_socket_addrs().unwrap().next().unwrap(); + debug!("ws address: {}", addr); + std::thread::spawn(move || { + let server = match Server::<NoTlsAcceptor>::bind(addr) { + Ok(v) => v, + Err(e) => { + s.send(Err(GameServerError::BindError(e))).unwrap(); + return; + }, + }; + info!("webserver is being launched"); + for req in server { + //println!("{:?}", req); + println!("gotcha"); + } + info!("webserver is being shut down"); + }); + GameServer { + addr, + rec: r, + } + } +} |