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