From c1616ce11fb221474f80e2ceb6e4ca00489befb5 Mon Sep 17 00:00:00 2001 From: michael-bailey Date: Wed, 18 Jan 2023 17:20:29 +0000 Subject: [PATCH] turned ref into weak ref --- foundation/src/messages/client.rs | 2 +- server/src/network/connection/actor.rs | 66 +++++++++++++------------- 2 files changed, 33 insertions(+), 35 deletions(-) diff --git a/foundation/src/messages/client.rs b/foundation/src/messages/client.rs index 6fb37c1..065a54e 100644 --- a/foundation/src/messages/client.rs +++ b/foundation/src/messages/client.rs @@ -38,5 +38,5 @@ pub enum ClientStreamOut { Disconnected, // error cases - Error, + Error { msg: String }, } diff --git a/server/src/network/connection/actor.rs b/server/src/network/connection/actor.rs index 06acafd..461196a 100644 --- a/server/src/network/connection/actor.rs +++ b/server/src/network/connection/actor.rs @@ -73,7 +73,7 @@ impl Actor for Connection { /// then eneters loop readling lines from the tcp stream fn started(&mut self, ctx: &mut Self::Context) { println!("[Connection] started"); - let addr = ctx.address().downgrade(); + let weak_addr = ctx.address().downgrade(); let read_half = self .read_half @@ -84,40 +84,38 @@ impl Actor for Connection { let mut buffer_string = String::new(); let address = self.address; - self.loop_future = Some( - ctx.spawn( - wrap_future(async move { - while let Ok(len) = reader.read_line(&mut buffer_string).await { - if len == 0 { - println!("[Connection] readline returned 0"); - break; - } - - if let Some(addr) = addr.upgrade() { - let _ = addr - .send(ConnectionPrivateMessage::Broadcast( - ConnectionObservableOutput::RecvData( - addr.downgrade(), - address, - buffer_string.clone(), - ), - )) - .await; - } - buffer_string.clear(); - - println!("[Connection] send data to observers"); - } - }) - .map(|_out, _a: &mut Connection, ctx| { + let reader_fut = wrap_future(async move { + while let Ok(len) = reader.read_line(&mut buffer_string).await { + if len == 0 { println!("[Connection] readline returned 0"); - let addr = ctx.address(); - addr.do_send(ConnectionPrivateMessage::Broadcast( - ConnectionObservableOutput::ConnectionClosed(addr.downgrade()), - )); - }), - ), - ); + break; + } + + if let Some(addr) = weak_addr.upgrade() { + let _ = addr + .send(ConnectionPrivateMessage::Broadcast( + ConnectionObservableOutput::RecvData( + addr.downgrade(), + address, + buffer_string.clone(), + ), + )) + .await; + } + buffer_string.clear(); + + println!("[Connection] send data to observers"); + } + }) + .map(|_out, _a: &mut Connection, ctx| { + println!("[Connection] readline returned 0"); + let addr = ctx.address(); + addr.do_send(ConnectionPrivateMessage::Broadcast( + ConnectionObservableOutput::ConnectionClosed(addr.downgrade()), + )); + }); + + self.loop_future = Some(ctx.spawn(reader_fut)); } fn stopped(&mut self, ctx: &mut Self::Context) {