implement target change propagation
This commit is contained in:
parent
4f75b3c156
commit
7d2549a650
|
@ -40,7 +40,8 @@ pub async fn broadcast_packet(packet: Packet) {
|
|||
}
|
||||
}
|
||||
PacketData::Disconnect(..) => {
|
||||
manager().send(PlayerDisconnected { id: packet.user_id }).await.unwrap();
|
||||
if packet.user_id != 1 {
|
||||
manager().send(PlayerDisconnected { id: packet.user_id }).await.unwrap();}
|
||||
}
|
||||
PacketData::Player(player) => {
|
||||
let _ = manager()
|
||||
|
|
|
@ -59,7 +59,10 @@ impl ProximityPlayer {
|
|||
if let Ok((name, global_speak)) = listener.send(GetStartInfo).await {
|
||||
send.write_all(id.as_bytes()).await.expect("failed to write peer id");
|
||||
send.write_all(name.as_bytes()).await.expect("failed to write peer name");
|
||||
send.write_all(&[if global_speak { 1 } else { 0 }]).await.expect("failed to write peer global speaking status");
|
||||
send
|
||||
.write_all(&[if global_speak { 1 } else { 0 }])
|
||||
.await
|
||||
.expect("failed to write peer global speaking status");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -121,11 +124,11 @@ impl Actor for ProximityPlayer {
|
|||
id: FromZeros::new_zeroed(),
|
||||
connected: true,
|
||||
name: FromZeros::new_zeroed(),
|
||||
global_speak: false
|
||||
global_speak: false,
|
||||
},
|
||||
};
|
||||
|
||||
for (id, listener) in listeners().write().await.iter() {
|
||||
for (id, listener) in listeners().read().await.iter() {
|
||||
if *id != self.id {
|
||||
if let Ok(Ok((name, global_speak))) = listener
|
||||
.send(PeerConnectionChanged {
|
||||
|
@ -156,7 +159,7 @@ impl Actor for ProximityPlayer {
|
|||
}
|
||||
async fn stopped(self) -> Self::Stop {
|
||||
listeners().write().await.remove(&self.id);
|
||||
for listener in listeners().write().await.iter() {
|
||||
for listener in listeners().read().await.iter() {
|
||||
if *listener.0 != self.id {
|
||||
let _ = listener
|
||||
.1
|
||||
|
@ -241,6 +244,24 @@ impl Handler<Event> for ProximityPlayer {
|
|||
}
|
||||
Event::TargetChanged(changed) => {
|
||||
self.name = changed.name;
|
||||
self.global_speak = changed.global_speak;
|
||||
|
||||
for (id, listener) in listeners().read().await.iter() {
|
||||
if *id != self.id {
|
||||
if let Err(error) = listener
|
||||
.send(PeerConnectionChanged {
|
||||
id: self.id,
|
||||
connected: true,
|
||||
name: self.name,
|
||||
global_speak: self.global_speak,
|
||||
})
|
||||
.detach()
|
||||
.await
|
||||
{
|
||||
warn!("listener {id} is dead: {error}")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -295,7 +316,7 @@ impl Handler<PeerConnectionChanged> for ProximityPlayer {
|
|||
id: message.id,
|
||||
connected: message.connected,
|
||||
name: message.name,
|
||||
global_speak: message.global_speak
|
||||
global_speak: message.global_speak,
|
||||
},
|
||||
};
|
||||
|
||||
|
@ -537,7 +558,7 @@ pub mod packet {
|
|||
}),
|
||||
3 => Self::TargetChanged(TargetChanged {
|
||||
name: read_fixed_string(recv).await?,
|
||||
global_speak: recv.read_u8().await? != 0
|
||||
global_speak: recv.read_u8().await? != 0,
|
||||
}),
|
||||
kind => bail!("invalid kind: {kind}"),
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue