This commit is contained in:
Martin Brodbeck 2023-10-02 23:51:49 +02:00
parent dc7304874a
commit 4d760871bd
3 changed files with 316 additions and 2 deletions

View file

@ -1,7 +1,41 @@
use std::net::UdpSocket;
use chrono::{DateTime, Local};
use std::{collections::HashSet, net::UdpSocket};
const MAX_CLIENTS: usize = 10;
const CLIENT_TIMEOUT: u32 = 300;
#[derive(Hash, Eq, PartialEq, Debug)]
struct Client {
name: String,
time: DateTime<Local>,
}
fn main() -> std::io::Result<()> {
let socket = UdpSocket::bind("0.0.0.0:7373")?;
socket
.set_read_timeout(None)
.expect("Could not set read timeout");
Ok(())
let mut receivers: HashSet<Client> = HashSet::new();
loop {
let mut buf = [0; 64];
let (number_of_bytes, src_addr) = socket.recv_from(&mut buf).expect("Didn't receive data");
let client_addr = src_addr.to_string();
if receivers.iter().any(|x| x.name == client_addr) {
} else {
if receivers.len() < MAX_CLIENTS {
let time = Local::now();
println!("New client: {client_addr}");
receivers.insert(Client {
name: client_addr,
time,
});
// TODO: welcome
} else {
// TODO: reject
}
}
}
}