summaryrefslogtreecommitdiff
path: root/src/room/websocket.rs
diff options
context:
space:
mode:
authorTyler Murphy <tylerm@tylerm.dev>2023-06-16 20:38:55 -0400
committerTyler Murphy <tylerm@tylerm.dev>2023-06-16 20:38:55 -0400
commit44334fc3852eb832280a335f72e6416c93a9f19f (patch)
tree4a97b6064a97c4ad58c07d89050ad8a11e7a4f70 /src/room/websocket.rs
parentbetter map bg renderer (diff)
downloadtuxman-44334fc3852eb832280a335f72e6416c93a9f19f.tar.gz
tuxman-44334fc3852eb832280a335f72e6416c93a9f19f.tar.bz2
tuxman-44334fc3852eb832280a335f72e6416c93a9f19f.zip
ts
Diffstat (limited to 'src/room/websocket.rs')
-rw-r--r--src/room/websocket.rs66
1 files changed, 0 insertions, 66 deletions
diff --git a/src/room/websocket.rs b/src/room/websocket.rs
deleted file mode 100644
index 50a4537..0000000
--- a/src/room/websocket.rs
+++ /dev/null
@@ -1,66 +0,0 @@
-use std::time::Duration;
-
-use axum::extract::ws::{WebSocket, Message};
-use tokio::sync::mpsc;
-
-use super::RoomMessage;
-use super::messages::ServerMessage;
-
-// set up some senders and receivers so that the websocket can receive messages from the task, send messages to the task, and notify the task when it closes
-pub async fn start_ws(mut ws: WebSocket, id: usize, tx: mpsc::Sender<RoomMessage>, mut rx: mpsc::Receiver<ServerMessage>) {
- loop {
- tokio::select! {
- m = ws.recv() => { // receive from the websocket and send it to `tx`
- if let Some(Ok(msg)) = m {
- // get the string contents
- let optionstring = match msg {
- Message::Text(s) => {
- Some(s)
- },
- Message::Binary(bin) => {
- String::from_utf8(bin).ok()
- },
- Message::Close(_) => { // quit the whole loop on disconnect
- break;
- },
- _ => None
- };
-
- // ignore things that aren't strings
- let Some(s) = optionstring else {
- continue;
- };
-
- // decode and send to the room
- match serde_json::from_str(&s) {
- Ok(message) => {
- tx.send_timeout(RoomMessage::WsMessage(id, message), Duration::from_secs(1)).await.ok();
- },
- Err(e) => { // let the client know if they sent a bad message
- if let Ok(text) = serde_json::to_string(&ServerMessage::Error{
- error: format!("Failed to decode JSON message: {}: {}", e, s),
- }) {
- ws.send(Message::Text(text)).await.ok();
- }
- }
- }
- } else { // websocket error
- break;
- }
- }
- s = rx.recv() => { // receive from `rx` and send it to the websocket
- if let Some(msg) = s {
- if let Ok(string) = serde_json::to_string(&msg) {
- ws.send(Message::Text(string)).await.ok();
- }
- } else { // shouldn't happen but this is if the room drops the sender, it should close the websocket anyways
- break;
- }
- }
- }
- }
-
- // websocket disconnect due to either error or normal disconnect
- // notify the room that the socket should be removed
- tx.send_timeout(RoomMessage::Remove(id), Duration::from_secs(1)).await.ok();
-}