39 lines
1003 B
Rust
39 lines
1003 B
Rust
use anyhow::Result;
|
|
use futures::stream::{FuturesUnordered, StreamExt};
|
|
use std::net::ToSocketAddrs;
|
|
use structopt::StructOpt;
|
|
use warp::{serve, ws, ws::Ws, Filter};
|
|
|
|
#[derive(StructOpt)]
|
|
/// Server for base2020 lockstep protocol for multiplayer games.
|
|
struct Args {
|
|
/// The socket address to listen for connections on;
|
|
/// can be a hostname to bind to multiple hosts at once,
|
|
/// such as to listen on both IPv4 & IPv6.
|
|
listen: String,
|
|
}
|
|
|
|
#[tokio::main]
|
|
async fn main() -> Result<()> {
|
|
let args = Args::from_args();
|
|
|
|
let socket_handler = ws().map(|upgrade: Ws| {
|
|
upgrade.on_upgrade(|websocket| {
|
|
async move {
|
|
drop(websocket);
|
|
}
|
|
})
|
|
});
|
|
|
|
let addrs = args.listen.to_socket_addrs()?;
|
|
let servers = FuturesUnordered::new();
|
|
for addr in addrs {
|
|
let (_, server) = serve(socket_handler).try_bind_ephemeral(addr)?;
|
|
servers.push(server);
|
|
}
|
|
|
|
servers.for_each(|_| async {}).await;
|
|
|
|
Ok(())
|
|
}
|