Skip to content

Commit 510b1b1

Browse files
committed
feat(p2p/webrtc): randomize discovered peers based on time
re: #772
1 parent e0947ce commit 510b1b1

File tree

1 file changed

+11
-2
lines changed
  • p2p/src/channels/signaling

1 file changed

+11
-2
lines changed

p2p/src/channels/signaling/mod.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ impl crate::P2pState {
3131
pub(super) fn webrtc_discovery_respond_with_availble_peers<Action, State>(
3232
&self,
3333
dispatcher: &mut redux::Dispatcher<Action, State>,
34+
time: redux::Timestamp,
3435
) where
3536
State: crate::P2pStateTrait,
3637
Action: crate::P2pActionTrait<State>,
@@ -50,9 +51,17 @@ impl crate::P2pState {
5051
},
5152
);
5253

53-
// TODO(binier): maybe randomize
54+
/// random shuffle available peers
55+
use rand::{seq::SliceRandom, SeedableRng};
56+
let mut rng = rand::rngs::StdRng::seed_from_u64(time.into());
57+
let mut available_peers_ordered = available_peers.iter().copied().collect::<Vec<_>>();
58+
available_peers_ordered.shuffle(&mut rng);
59+
5460
for requester in requests {
55-
if let Some(target_peer_id) = available_peers.iter().find(|&&id| id != requester) {
61+
if let Some(target_peer_id) = available_peers_ordered
62+
.iter()
63+
.find(|&&id| id != requester && available_peers.contains(id))
64+
{
5665
let target_peer_id = *target_peer_id;
5766
dispatcher.push(P2pChannelsSignalingDiscoveryAction::DiscoveredSend {
5867
peer_id: *requester,

0 commit comments

Comments
 (0)