1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
use core::{env, state::GlobalState};
use session::Session;
use tokio::sync::mpsc;
use utils::net::{accept_stream, listener};

mod models;
mod routes;
mod session;

/// Starts the main server which is responsible for a majority of the
/// game logic such as games, sessions, etc.
pub async fn start_server() {
    let listener = listener("Main", env::from_env(env::MAIN_PORT)).await;
    let mut shutdown = GlobalState::shutdown();
    let mut session_id = 1;
    while let Some(values) = accept_stream(&listener, &mut shutdown).await {
        let (message_sender, message_recv) = mpsc::channel(20);
        let session = Session::new(session_id, values, message_sender);
        tokio::spawn(session.process(message_recv));
        session_id += 1;
    }
}