1
0
mirror of https://git.ngram.ca/OpenJam/rc-servers synced 2026-08-23 23:08:52 +00:00

Change single connection mode to CLI arg instead of forced in debug mode

This commit is contained in:
NGnius (Graham)
2025-03-16 09:30:45 -04:00
parent ec565e904b
commit 792585a031
18 changed files with 81 additions and 81 deletions

View File

@@ -1,3 +1,3 @@
#!/bin/bash #!/bin/bash
RUST_BACKTRACE=1 RUST_LOG=debug cargo run RUST_BACKTRACE=1 RUST_LOG=debug cargo run -- -1

View File

@@ -11,10 +11,6 @@ pub struct CliArgs {
#[arg(long, default_value_t = {"127.0.0.1".to_string()})] #[arg(long, default_value_t = {"127.0.0.1".to_string()})]
pub ip: String, pub ip: String,
/// Socket read tries before giving up (0 to never give up)
#[arg(long, default_value_t = 5)]
pub retries: usize,
/// Domain and port of the game server to send new connections /// Domain and port of the game server to send new connections
#[arg(long, default_value_t = {"127.0.0.1:4537".to_string()})] #[arg(long, default_value_t = {"127.0.0.1:4537".to_string()})]
pub redirect: String, pub redirect: String,
@@ -22,6 +18,10 @@ pub struct CliArgs {
/// Name of game server to send new connections /// Name of game server to send new connections
#[arg(long, default_value_t = {"ngram_is_ngnius".to_string()})] #[arg(long, default_value_t = {"ngram_is_ngnius".to_string()})]
pub room_name: String, pub room_name: String,
/// Handle one connection and then exit
#[arg(short = '1', long)]
pub once: bool,
} }
impl CliArgs { impl CliArgs {

View File

@@ -21,16 +21,16 @@ async fn main() -> std::io::Result<()> {
let listener = net::TcpListener::bind(std::net::SocketAddr::new(ip_addr, args.port)).await?; let listener = net::TcpListener::bind(std::net::SocketAddr::new(ip_addr, args.port)).await?;
#[cfg(not(debug_assertions))] if args.once {
loop { log::warn!("Handling first connection and then exiting");
let (socket, address) = listener.accept().await?;
tokio::spawn(process_socket(socket, address, op_handler.clone(), redirect_static, room_name_static));
}
#[cfg(debug_assertions)]
{
let (socket, address) = listener.accept().await?; let (socket, address) = listener.accept().await?;
process_socket(socket, address, redirect_static, room_name_static).await; process_socket(socket, address, redirect_static, room_name_static).await;
Ok(()) Ok(())
} else {
loop {
let (socket, address) = listener.accept().await?;
tokio::spawn(process_socket(socket, address, redirect_static, room_name_static));
}
} }
} }

View File

@@ -1,3 +1,3 @@
#!/bin/bash #!/bin/bash
RUST_BACKTRACE=1 RUST_LOG=debug cargo run RUST_BACKTRACE=1 RUST_LOG=debug cargo run -- -1

View File

@@ -11,9 +11,9 @@ pub struct CliArgs {
#[arg(long, default_value_t = {"127.0.0.1".to_string()})] #[arg(long, default_value_t = {"127.0.0.1".to_string()})]
pub ip: String, pub ip: String,
/// Socket read tries before giving up (0 to never give up) /// Handle one connection and then exit
#[arg(long, default_value_t = 5)] #[arg(short = '1', long)]
pub retries: usize, pub once: bool,
} }
impl CliArgs { impl CliArgs {

View File

@@ -18,26 +18,26 @@ async fn main() -> std::io::Result<()> {
let args = cli::CliArgs::get(); let args = cli::CliArgs::get();
log::debug!("Got cli args {:?}", args); log::debug!("Got cli args {:?}", args);
let server = polariton_server::Server::new(operations::handler()); let server = std::sync::Arc::new(polariton_server::Server::new(operations::handler()));
let ip_addr: std::net::IpAddr = args.ip.parse().expect("Invalid IP address"); let ip_addr: std::net::IpAddr = args.ip.parse().expect("Invalid IP address");
let listener = net::TcpListener::bind(std::net::SocketAddr::new(ip_addr, args.port)).await?; let listener = net::TcpListener::bind(std::net::SocketAddr::new(ip_addr, args.port)).await?;
#[cfg(not(debug_assertions))] if args.once {
log::warn!("Handling first connection and then exiting");
let (socket, address) = listener.accept().await?;
process_socket(socket, address, server).await;
Ok(())
} else {
loop { loop {
let (socket, address) = listener.accept().await?; let (socket, address) = listener.accept().await?;
tokio::spawn(process_socket(socket, address, &server)); tokio::spawn(process_socket(socket, address, server.clone()));
} }
#[cfg(debug_assertions)]
{
let (socket, address) = listener.accept().await?;
process_socket(socket, address, &server).await;
Ok(())
} }
} }
async fn process_socket(mut socket: net::TcpStream, address: std::net::SocketAddr, server: &polariton_server::Server<crate::UserTy>) { async fn process_socket(mut socket: net::TcpStream, address: std::net::SocketAddr, server: std::sync::Arc<polariton_server::Server<crate::UserTy>>) {
log::debug!("Accepting connection from address {}", address); log::debug!("Accepting connection from address {}", address);
let enc = match do_connect_handshake(&mut socket).await { let enc = match do_connect_handshake(&mut socket).await {
Some(x) => x, Some(x) => x,

View File

@@ -1,3 +1,3 @@
#!/bin/bash #!/bin/bash
RUST_BACKTRACE=1 RUST_LOG=debug cargo run RUST_BACKTRACE=1 RUST_LOG=debug cargo run -- -1

View File

@@ -11,10 +11,6 @@ pub struct CliArgs {
#[arg(long, default_value_t = {"127.0.0.1".to_string()})] #[arg(long, default_value_t = {"127.0.0.1".to_string()})]
pub ip: String, pub ip: String,
/// Socket read tries before giving up (0 to never give up)
#[arg(long, default_value_t = 5)]
pub retries: usize,
/// Domain and port of the game server to send new connections /// Domain and port of the game server to send new connections
#[arg(long, default_value_t = {"127.0.0.1:4533".to_string()})] #[arg(long, default_value_t = {"127.0.0.1:4533".to_string()})]
pub redirect: String, pub redirect: String,
@@ -22,6 +18,10 @@ pub struct CliArgs {
/// Name of game server to send new connections /// Name of game server to send new connections
#[arg(long, default_value_t = {"ngram_is_ngnius".to_string()})] #[arg(long, default_value_t = {"ngram_is_ngnius".to_string()})]
pub room_name: String, pub room_name: String,
/// Handle one connection and then exit
#[arg(short = '1', long)]
pub once: bool,
} }
impl CliArgs { impl CliArgs {

View File

@@ -20,16 +20,16 @@ async fn main() -> std::io::Result<()> {
let listener = net::TcpListener::bind(std::net::SocketAddr::new(ip_addr, args.port)).await?; let listener = net::TcpListener::bind(std::net::SocketAddr::new(ip_addr, args.port)).await?;
#[cfg(not(debug_assertions))] if args.once {
log::warn!("Handling first connection and then exiting");
let (socket, address) = listener.accept().await?;
process_socket(socket, address, redirect_static, room_name_static).await;
Ok(())
} else {
loop { loop {
let (socket, address) = listener.accept().await?; let (socket, address) = listener.accept().await?;
tokio::spawn(process_socket(socket, address, redirect_static, room_name_static)); tokio::spawn(process_socket(socket, address, redirect_static, room_name_static));
} }
#[cfg(debug_assertions)]
{
let (socket, address) = listener.accept().await?;
process_socket(socket, address, redirect_static, room_name_static).await;
Ok(())
} }
} }

View File

@@ -1,3 +1,3 @@
#!/bin/bash #!/bin/bash
RUST_BACKTRACE=1 RUST_LOG=debug cargo run #&> ../data/rc_services_room.log RUST_BACKTRACE=1 RUST_LOG=debug cargo run -- -1 #&> ../data/rc_services_room.log

View File

@@ -11,10 +11,6 @@ pub struct CliArgs {
#[arg(long, default_value_t = {"127.0.0.1".to_string()})] #[arg(long, default_value_t = {"127.0.0.1".to_string()})]
pub ip: String, pub ip: String,
/// Socket read tries before giving up (0 to never give up)
#[arg(long, default_value_t = 5)]
pub retries: usize,
/// Assets root /// Assets root
#[arg(long, default_value_t = {"../assets/robocraft".to_string()})] #[arg(long, default_value_t = {"../assets/robocraft".to_string()})]
pub assets: String, pub assets: String,
@@ -22,6 +18,10 @@ pub struct CliArgs {
/// User data root /// User data root
#[arg(long, default_value_t = {"../data/robocraft".to_string()})] #[arg(long, default_value_t = {"../data/robocraft".to_string()})]
pub data: String, pub data: String,
/// Handle one connection and then exit
#[arg(short = '1', long)]
pub once: bool,
} }
impl CliArgs { impl CliArgs {

View File

@@ -27,31 +27,31 @@ async fn main() -> std::io::Result<()> {
let cubes = persist::config::ConfigImpl::load(&args.assets).expect("Bad config data"); let cubes = persist::config::ConfigImpl::load(&args.assets).expect("Bad config data");
let users = std::sync::Arc::new(persist::user::UserImpl::load(&args.data, &cubes).expect("Bad user data")); let users = std::sync::Arc::new(persist::user::UserImpl::load(&args.data, &cubes).expect("Bad user data"));
let init_ctx = InitConfig { let init_ctx = std::sync::Arc::new(InitConfig {
cubes, cubes,
users, users,
}; });
let server = polariton_server::Server::new(operations::handler(&init_ctx)); let server = std::sync::Arc::new(polariton_server::Server::new(operations::handler(&init_ctx)));
let ip_addr: std::net::IpAddr = args.ip.parse().expect("Invalid IP address"); let ip_addr: std::net::IpAddr = args.ip.parse().expect("Invalid IP address");
let listener = net::TcpListener::bind(std::net::SocketAddr::new(ip_addr, args.port)).await?; let listener = net::TcpListener::bind(std::net::SocketAddr::new(ip_addr, args.port)).await?;
#[cfg(not(debug_assertions))] if args.once {
log::warn!("Handling first connection and then exiting");
let (socket, address) = listener.accept().await?;
process_socket(socket, address, server, init_ctx).await;
Ok(())
} else {
loop { loop {
let (socket, address) = listener.accept().await?; let (socket, address) = listener.accept().await?;
tokio::spawn(process_socket(socket, address, &server, &init_ctx)); tokio::spawn(process_socket(socket, address, server.clone(), init_ctx.clone()));
} }
#[cfg(debug_assertions)]
{
let (socket, address) = listener.accept().await?;
process_socket(socket, address, &server, &init_ctx).await;
Ok(())
} }
} }
async fn process_socket(mut socket: net::TcpStream, address: std::net::SocketAddr, server: &polariton_server::Server<crate::UserTy>, init_ctx: &InitConfig) { async fn process_socket(mut socket: net::TcpStream, address: std::net::SocketAddr, server: std::sync::Arc<polariton_server::Server<crate::UserTy>>, init_ctx: std::sync::Arc<InitConfig>) {
log::debug!("Accepting connection from address {}", address); log::debug!("Accepting connection from address {}", address);
let enc = match do_connect_handshake(&mut socket).await { let enc = match do_connect_handshake(&mut socket).await {
Some(x) => x, Some(x) => x,

View File

@@ -1,3 +1,3 @@
#!/bin/bash #!/bin/bash
RUST_BACKTRACE=1 RUST_LOG=debug cargo run RUST_BACKTRACE=1 RUST_LOG=debug cargo run -- -1

View File

@@ -11,10 +11,6 @@ pub struct CliArgs {
#[arg(long, default_value_t = {"127.0.0.1".to_string()})] #[arg(long, default_value_t = {"127.0.0.1".to_string()})]
pub ip: String, pub ip: String,
/// Socket read tries before giving up (0 to never give up)
#[arg(long, default_value_t = 5)]
pub retries: usize,
/// Domain and port of the game server to send new connections /// Domain and port of the game server to send new connections
#[arg(long, default_value_t = {"127.0.0.1:4535".to_string()})] #[arg(long, default_value_t = {"127.0.0.1:4535".to_string()})]
pub redirect: String, pub redirect: String,
@@ -22,6 +18,10 @@ pub struct CliArgs {
/// Name of game server to send new connections /// Name of game server to send new connections
#[arg(long, default_value_t = {"ngram_is_ngnius".to_string()})] #[arg(long, default_value_t = {"ngram_is_ngnius".to_string()})]
pub room_name: String, pub room_name: String,
/// Handle one connection and then exit
#[arg(short = '1', long)]
pub once: bool,
} }
impl CliArgs { impl CliArgs {

View File

@@ -21,16 +21,16 @@ async fn main() -> std::io::Result<()> {
let listener = net::TcpListener::bind(std::net::SocketAddr::new(ip_addr, args.port)).await?; let listener = net::TcpListener::bind(std::net::SocketAddr::new(ip_addr, args.port)).await?;
#[cfg(not(debug_assertions))] if args.once {
loop { log::warn!("Handling first connection and then exiting");
let (socket, address) = listener.accept().await?;
tokio::spawn(process_socket(socket, address, op_handler.clone(), redirect_static, room_name_static));
}
#[cfg(debug_assertions)]
{
let (socket, address) = listener.accept().await?; let (socket, address) = listener.accept().await?;
process_socket(socket, address, redirect_static, room_name_static).await; process_socket(socket, address, redirect_static, room_name_static).await;
Ok(()) Ok(())
} else {
loop {
let (socket, address) = listener.accept().await?;
tokio::spawn(process_socket(socket, address, redirect_static, room_name_static));
}
} }
} }

View File

@@ -1,3 +1,3 @@
#!/bin/bash #!/bin/bash
RUST_BACKTRACE=1 RUST_LOG=debug cargo run RUST_BACKTRACE=1 RUST_LOG=debug cargo run -- -1

View File

@@ -11,9 +11,9 @@ pub struct CliArgs {
#[arg(long, default_value_t = {"127.0.0.1".to_string()})] #[arg(long, default_value_t = {"127.0.0.1".to_string()})]
pub ip: String, pub ip: String,
/// Socket read tries before giving up (0 to never give up) /// Handle one connection and then exit
#[arg(long, default_value_t = 5)] #[arg(short = '1', long)]
pub retries: usize, pub once: bool,
} }
impl CliArgs { impl CliArgs {

View File

@@ -18,26 +18,26 @@ async fn main() -> std::io::Result<()> {
let args = cli::CliArgs::get(); let args = cli::CliArgs::get();
log::debug!("Got cli args {:?}", args); log::debug!("Got cli args {:?}", args);
let server = polariton_server::Server::new(operations::handler()); let server = std::sync::Arc::new(polariton_server::Server::new(operations::handler()));
let ip_addr: std::net::IpAddr = args.ip.parse().expect("Invalid IP address"); let ip_addr: std::net::IpAddr = args.ip.parse().expect("Invalid IP address");
let listener = net::TcpListener::bind(std::net::SocketAddr::new(ip_addr, args.port)).await?; let listener = net::TcpListener::bind(std::net::SocketAddr::new(ip_addr, args.port)).await?;
#[cfg(not(debug_assertions))] if args.once {
log::warn!("Handling first connection and then exiting");
let (socket, address) = listener.accept().await?;
process_socket(socket, address, server).await;
Ok(())
} else {
loop { loop {
let (socket, address) = listener.accept().await?; let (socket, address) = listener.accept().await?;
tokio::spawn(process_socket(socket, address, &server)); tokio::spawn(process_socket(socket, address, server.clone()));
} }
#[cfg(debug_assertions)]
{
let (socket, address) = listener.accept().await?;
process_socket(socket, address, &server).await;
Ok(())
} }
} }
async fn process_socket(mut socket: net::TcpStream, address: std::net::SocketAddr, server: &polariton_server::Server<crate::UserTy, crate::data::custom::CustomType>) { async fn process_socket(mut socket: net::TcpStream, address: std::net::SocketAddr, server: std::sync::Arc<polariton_server::Server<crate::UserTy, crate::data::custom::CustomType>>) {
log::debug!("Accepting connection from address {}", address); log::debug!("Accepting connection from address {}", address);
let enc = match do_connect_handshake(&mut socket).await { let enc = match do_connect_handshake(&mut socket).await {
Some(x) => x, Some(x) => x,