…
This commit is contained in:
parent
dc7304874a
commit
4d760871bd
3 changed files with 316 additions and 2 deletions
38
src/main.rs
38
src/main.rs
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue