optimize: do not prepare noise for non-receivers

This commit is contained in:
Youngjoon Lee 2024-09-27 08:45:00 +09:00
parent 38b96fcec4
commit abc67ea7df
No known key found for this signature in database
GPG Key ID: 167546E2D1712F8C
3 changed files with 19 additions and 4 deletions

View File

@ -136,7 +136,7 @@ fn relay_messages(
// Collect messages to relay
let mut all_msgs_to_relay: Vec<Vec<(NodeId, Message<MessageId>)>> = Vec::new();
for node in nodes.iter_mut() {
all_msgs_to_relay.push(node.read_queues());
all_msgs_to_relay.push(node.read_queues(None));
}
// Relay the messages

View File

@ -280,7 +280,7 @@ impl AllMessagesToRelay {
fn new(mixnodes: &mut [Node<DataMessage>]) -> Self {
let mut all_msgs_to_relay = Vec::with_capacity(mixnodes.len());
for node in mixnodes.iter_mut() {
all_msgs_to_relay.push((node.id, node.read_queues()));
all_msgs_to_relay.push((node.id, node.read_queues(Some(RECEIVER_NODE_ID))));
}
Self(all_msgs_to_relay)
}

View File

@ -87,10 +87,25 @@ where
first_received
}
pub fn read_queues(&mut self) -> MessagesToRelay<M> {
pub fn read_queues(&mut self, noise_receiver: Option<NodeId>) -> MessagesToRelay<M> {
let mut msgs_to_relay: MessagesToRelay<M> = Vec::with_capacity(self.queues.len());
self.queues.iter_mut().for_each(|(node_id, queue)| {
msgs_to_relay.push((*node_id, queue.pop()));
let msg = queue.pop();
match msg {
Message::Data(_) => {
msgs_to_relay.push((*node_id, msg));
}
Message::Noise => match noise_receiver {
Some(noise_receiver) => {
if *node_id == noise_receiver {
msgs_to_relay.push((*node_id, msg));
}
}
None => {
msgs_to_relay.push((*node_id, msg));
}
},
}
});
msgs_to_relay
}