diff options
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); }); } } |