turned ref into weak ref

This commit is contained in:
michael-bailey 2023-01-18 17:20:29 +00:00
parent f81246e1fa
commit c1616ce11f
2 changed files with 33 additions and 35 deletions

View File

@ -38,5 +38,5 @@ pub enum ClientStreamOut {
Disconnected,
// error cases
Error,
Error { msg: String },
}

View File

@ -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) {