odyssey-server/src/main.rs

47 lines
1.3 KiB
Rust

mod config;
mod game;
use crate::config::Settings;
use crate::game::world::GameWorld;
use futures_util::StreamExt;
use log::info;
use std::io::Error;
use tokio::net::{TcpListener, TcpStream};
#[tokio::main]
async fn main() -> Result<(), Error> {
let world = GameWorld::new();
let mut dispatcher = world.dispatcher();
dispatcher.dispatch();
let settings = Settings::new().unwrap();
// Create the event loop and TCP listener we'll accept connections on.
let try_socket = TcpListener::bind(&settings.bind).await;
let mut listener = try_socket.expect("Failed to bind");
info!("Listening on: {}", settings.bind);
while let Ok((stream, _)) = listener.accept().await {
tokio::spawn(accept_connection(stream));
}
dispatcher.wait();
Ok(())
}
async fn accept_connection(stream: TcpStream) {
let addr = stream
.peer_addr()
.expect("connected streams should have a peer address");
info!("Peer address: {}", addr);
let ws_stream = tokio_tungstenite::accept_async(stream)
.await
.expect("Error during the websocket handshake occurred");
info!("New WebSocket connection: {}", addr);
let (write, read) = ws_stream.split();
read.forward(write)
.await
.expect("Failed to forward message")
}