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(()) }