pub struct WeakAddr<A: Actor> { /* private fields */ }
Expand description
A weakly referenced counterpart to Addr<A>
.
Implementations§
source§impl<A: Actor> WeakAddr<A>
impl<A: Actor> WeakAddr<A>
sourcepub fn upgrade(&self) -> Option<Addr<A>>
pub fn upgrade(&self) -> Option<Addr<A>>
Attempts to upgrade the WeakAddr<A>
pointer to an Addr<A>
.
Returns None
if the actor has since been dropped or the
underlying address is disconnected.
Examples found in repository?
examples/weak_addr.rs (line 28)
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
fn send_tick(&mut self, _ctx: &mut Context<Self>) {
for client in self.clients.iter() {
if let Some(client) = client.upgrade() {
client.do_send(TimePing(Instant::now()));
println!("⏰ sent ping to client {:?}", client);
} else {
println!("⏰ client can no longer be upgraded");
}
}
// gc
self.clients = self
.clients
.drain(..)
.filter(|c| c.upgrade().is_some())
.collect();
println!("⏰ service has {} clients", self.clients.len());
}
sourcepub fn recipient<M>(self) -> WeakRecipient<M>
pub fn recipient<M>(self) -> WeakRecipient<M>
Examples found in repository?
examples/weak_recipient.rs (line 89)
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126
fn started(&mut self, ctx: &mut Self::Context) {
println!("🐰 starting ClientA");
TimeService::from_registry()
.send(RegisterForTime(ctx.address().downgrade().recipient()))
.into_actor(self)
.then(|_, _slf, _| fut::ready(()))
.spawn(ctx);
}
fn stopping(&mut self, _ctx: &mut Self::Context) -> Running {
println!("🐰 stopping ClientA");
Running::Stop
}
fn stopped(&mut self, _ctx: &mut Self::Context) {
println!("🐰 stopped ClientA");
}
}
impl Handler<TimePing> for ClientA {
type Result = ();
fn handle(&mut self, msg: TimePing, _ctx: &mut Self::Context) -> Self::Result {
println!("🐰 ClientA received ping: {:?}", msg.0);
}
}
#[derive(Debug, Default)]
pub struct ClientB;
impl Actor for ClientB {
type Context = Context<Self>;
fn started(&mut self, ctx: &mut Self::Context) {
println!("🐇 starting ClientB");
TimeService::from_registry()
.send(RegisterForTime(ctx.address().downgrade().recipient()))
.into_actor(self)
.then(|_, _slf, _| fut::ready(()))
.spawn(ctx);
}
Trait Implementations§
source§impl<A, M: Message + Send + 'static> From<WeakAddr<A>> for WeakRecipient<M>
impl<A, M: Message + Send + 'static> From<WeakAddr<A>> for WeakRecipient<M>
source§fn from(addr: WeakAddr<A>) -> WeakRecipient<M>
fn from(addr: WeakAddr<A>) -> WeakRecipient<M>
Converts to this type from the input type.
source§impl<A: Actor> PartialEq for WeakAddr<A>
impl<A: Actor> PartialEq for WeakAddr<A>
impl<A: Actor> Eq for WeakAddr<A>
Auto Trait Implementations§
impl<A> !RefUnwindSafe for WeakAddr<A>
impl<A> Send for WeakAddr<A>
impl<A> Sync for WeakAddr<A>
impl<A> Unpin for WeakAddr<A>
impl<A> !UnwindSafe for WeakAddr<A>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more