diff options
Diffstat (limited to 'server/src/main.rs')
-rw-r--r-- | server/src/main.rs | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/server/src/main.rs b/server/src/main.rs index 5b191365..68927eaa 100644 --- a/server/src/main.rs +++ b/server/src/main.rs @@ -143,18 +143,25 @@ async fn run() -> anyhow::Result<()> { while let Some(Ok(message)) = read.next().await { match message { Message::Text(line) => { - let Ok(packet): Result<PacketS, _> = serde_json::from_str(&line) else { - warn!("invalid json over ws"); - break; + let packet = match serde_json::from_str(&line) { + Ok(p) => p, + Err(e) => { + warn!("invalid packet: {e}"); + break; + } }; debug!("<- {id:?} {packet:?}"); - if let Err(e) = state.write().await.packet_in(id, packet).await { - warn!("client error: {e}"); - let _ = error_tx - .send(PacketC::Error { + let packet_out = match state.write().await.packet_in(id, packet).await { + Ok(packets) => packets, + Err(e) => { + warn!("client error: {e}"); + vec![PacketC::Error { message: format!("{e}"), - }) - .await; + }] + } + }; + for packet in packet_out { + let _ = error_tx.send(packet).await; } } Message::Close(_) => break, |