diff options
author | RaindropsSys <raindrops@equestria.dev> | 2024-03-10 14:40:11 +0100 |
---|---|---|
committer | RaindropsSys <raindrops@equestria.dev> | 2024-03-10 14:40:11 +0100 |
commit | 22fbe428712c78725380244da1ac1aaa5768b2b9 (patch) | |
tree | 891ae0e1619a5bea997573783135824c09309a95 /whered | |
parent | 15374e0491e75c961c7311f5933e5acd0855672b (diff) | |
download | where-rs-22fbe428712c78725380244da1ac1aaa5768b2b9.tar.gz where-rs-22fbe428712c78725380244da1ac1aaa5768b2b9.tar.bz2 where-rs-22fbe428712c78725380244da1ac1aaa5768b2b9.zip |
Add missing Nix files
Diffstat (limited to 'whered')
-rw-r--r-- | whered/src/main.rs | 43 |
1 files changed, 28 insertions, 15 deletions
diff --git a/whered/src/main.rs b/whered/src/main.rs index efc3fcc..6990dd6 100644 --- a/whered/src/main.rs +++ b/whered/src/main.rs @@ -1,23 +1,36 @@ use std::net::UdpSocket; -use where_shared::*; +use where_shared::error::WhereResult; +use where_shared::{SessionCollection, WHERED_MAGIC}; fn main() { - let socket = UdpSocket::bind("0.0.0.0:15").expect("Could not bind to port 15, is another instance of whered running?"); + if let Err(e) = run_server() { + eprintln!("whered: {}", e); + std::process::exit(1); + } +} + +fn run_server() -> WhereResult<()> { + let socket = UdpSocket::bind("0.0.0.0:15")?; + println!("Now listening on 0.0.0.0:15"); loop { - let mut buf = [0; WHERED_MAGIC.len()]; - let Ok((_, src)) = socket.recv_from(&mut buf) else { - eprintln!("Failed to receive data from the client, ignoring"); - continue - }; - - println!("{src}: New client!"); - - let sessions = SessionCollection::fetch(); - if let Err(_) = socket.send_to(&*sessions.into_bytes(), src) { - eprintln!("{src}: Failed to send data back to the client, ignoring"); - } else { - println!("{src}: Completed request"); + if let Err(e) = handle_request(&socket) { + eprintln!("whered: {}", e); } } +} + +fn handle_request(socket: &UdpSocket) -> WhereResult<()> { + let mut buf = [0; WHERED_MAGIC.len()]; + + let (_, src) = socket.recv_from(&mut buf)?; + println!("{src}: New client!"); + + let sessions = SessionCollection::fetch(); + let buf = sessions.to_udp_payload()?; + + socket.send_to(&buf, src)?; + println!("{src}: Completed request within {} bytes", buf.len()); + + Ok(()) }
\ No newline at end of file |