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