JadeSR/gameserver/src/net/gateway.rs
2024-05-09 16:23:01 +03:00

29 lines
908 B
Rust

use anyhow::Result;
use common::log_error;
use tokio::net::TcpListener;
use tracing::{info_span, Instrument};
use crate::net::PlayerSession;
pub async fn listen(host: &str, port: u16) -> Result<()> {
let listener = TcpListener::bind(format!("{host}:{port}")).await?;
tracing::info!("Listening at {host}:{port}");
loop {
let Ok((client_socket, client_addr)) = listener.accept().await else {
continue;
};
let mut session = PlayerSession::new(client_socket);
tokio::spawn(
async move {
log_error!(
"Session from {client_addr} disconnected",
format!("An error occurred while processing session ({client_addr})"),
Box::pin(session.run()).await
);
}
.instrument(info_span!("session", addr = %client_addr)),
);
}
}