aboutsummaryrefslogtreecommitdiff
path: root/server/src/main.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/main.rs')
-rw-r--r--server/src/main.rs26
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);
});
}
}