aboutsummaryrefslogtreecommitdiff
path: root/games/rstnode/rst-server/src/net/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'games/rstnode/rst-server/src/net/mod.rs')
-rw-r--r--games/rstnode/rst-server/src/net/mod.rs43
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,
+}
+