diff options
author | metamuffin <metamuffin@disroot.org> | 2024-06-17 02:25:55 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-06-17 02:25:55 +0200 |
commit | b8f7115ef39ff8e855f3452e087241f974745438 (patch) | |
tree | f910caf244338c0e23bd6cdb31254bda8feb9ce9 /server/src/main.rs | |
parent | b65849bce3fe8ff8d6baebf29728868d4f164827 (diff) | |
download | hurrycurry-b8f7115ef39ff8e855f3452e087241f974745438.tar hurrycurry-b8f7115ef39ff8e855f3452e087241f974745438.tar.bz2 hurrycurry-b8f7115ef39ff8e855f3452e087241f974745438.tar.zst |
prime clients and tile rendering
Diffstat (limited to 'server/src/main.rs')
-rw-r--r-- | server/src/main.rs | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/server/src/main.rs b/server/src/main.rs index 477595d0..7426e27e 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -53,11 +53,14 @@ async fn main() -> Result<()> { let game = game.clone(); let mut rx = rx.resubscribe(); info!("{addr} connected"); + let init = game.write().await.prime_client(id); spawn(async move { - write - .write_all(serde_json::to_string(&PacketC::Joined { id }).unwrap().as_bytes()) - .await?; - write.write_all(b"\n").await?; + for p in init { + write + .write_all(serde_json::to_string(&p).unwrap().as_bytes()) + .await?; + write.write_all(b"\n").await?; + } while let Ok(packet) = rx.recv().await { write .write_all(serde_json::to_string(&packet).unwrap().as_bytes()) @@ -78,6 +81,7 @@ async fn main() -> Result<()> { warn!("client error: {e}"); } } + let _ = game.write().await.packet_in(id, PacketS::Leave); }); } r = ws_listener.accept() => { @@ -87,12 +91,15 @@ async fn main() -> Result<()> { let game = game.clone(); let mut rx = rx.resubscribe(); info!("{addr} connected via ws"); + let init = game.write().await.prime_client(id); spawn(async move { - if let Err(e) = write.send(tokio_tungstenite::tungstenite::Message::Text( - serde_json::to_string(&PacketC::Joined { id }).unwrap(), - )).await { - warn!("ws error on init: {e}"); - return; + for p in init { + if let Err(e) = write.send(tokio_tungstenite::tungstenite::Message::Text( + serde_json::to_string(&p).unwrap(), + )).await { + warn!("ws error on init: {e}"); + return; + } } while let Ok(packet) = rx.recv().await { if let Err(e) = write.send(tokio_tungstenite::tungstenite::Message::Text( @@ -120,6 +127,7 @@ async fn main() -> Result<()> { _ => (), } } + let _ = game.write().await.packet_in(id, PacketS::Leave); }); } } |