extern crate cobalt;
use cobalt::{
BinaryRateLimiter, Config, NoopPacketModifier, MessageKind, UdpSocket,
Server, ServerEvent
};
fn main() {
let mut server = Server::<
UdpSocket,
BinaryRateLimiter,
NoopPacketModifier
>::new(Config::default());
println!("[Server] Listening...");
server.listen("0.0.0.0:1234").expect("Failed to bind to socket.");
'main: loop {
while let Ok(event) = server.accept_receive() {
match event {
ServerEvent::Connection(id) => {
let conn = server.connection(&id).unwrap();
println!(
"[Server] Client {} ({}, {}ms rtt) connected.",
id.0,
conn.peer_addr(),
conn.rtt()
);
},
ServerEvent::Message(id, message) => {
let conn = server.connection(&id).unwrap();
println!(
"[Server] Message from client {} ({}, {}ms rtt): {:?}",
id.0,
conn.peer_addr(),
conn.rtt(),
message
);
},
ServerEvent::ConnectionClosed(id, _) | ServerEvent::ConnectionLost(id, _) => {
let conn = server.connection(&id).unwrap();
println!(
"[Server] Client {} ({}, {}ms rtt) disconnected.",
id.0,
conn.peer_addr(),
conn.rtt()
);
break 'main;
},
_ => {}
}
}
for (_, conn) in server.connections() {
conn.send(MessageKind::Instant, b"Hello from Server".to_vec());
}
server.send(true).is_ok();
}
println!("[Server] Shutting down...");
server.shutdown().ok();
}