diff options
Diffstat (limited to 'games/rstnode/rst-server/src/net/mod.rs')
-rw-r--r-- | games/rstnode/rst-server/src/net/mod.rs | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/games/rstnode/rst-server/src/net/mod.rs b/games/rstnode/rst-server/src/net/mod.rs new file mode 100644 index 000000000000..deb35f7f89b9 --- /dev/null +++ b/games/rstnode/rst-server/src/net/mod.rs @@ -0,0 +1,43 @@ +#![allow(unused)] + +mod parser; + +use async_std::{ + net::UdpSocket, + sync::{Arc, RwLock}, + task, +}; +use rst_core::Id; +use std::{collections::BTreeMap, net::SocketAddr}; + +pub struct ServerEndpoint { + socket: UdpSocket, + bind: String, + clients: RwLock<BTreeMap<Id, Client>>, +} + +impl ServerEndpoint { + pub async fn new(bind: &str) -> Arc<Self> { + let socket = UdpSocket::bind(bind).await.unwrap(); + Arc::new(Self { + socket, + bind: bind.into(), + clients: Default::default(), + }) + } + + pub async fn listen(self: &Arc<Self>) { + let mut buf = vec![0; 1024]; + + info!("Listening for connections on {}", self.bind); + + loop { + let (_, peer) = self.socket.recv_from(&mut buf).await.unwrap(); + } + } +} + +pub struct Client { + addr: SocketAddr, +} + |