diff --git a/lib/core/core/src/router.rs b/lib/core/core/src/router.rs index 559f783445bc043114375d0500d585ecd62f4c49..ec9441c329b0335fe195ed369c9ae8a269df7967 100644 --- a/lib/core/core/src/router.rs +++ b/lib/core/core/src/router.rs @@ -40,7 +40,6 @@ enum DursMsgReceiver { /// Start broadcasting thread fn start_broadcasting_thread( start_time: SystemTime, - run_duration_in_secs: u64, receiver: &mpsc::Receiver<RouterThreadMessage<DursMsg>>, _external_followers: &[mpsc::Sender<DursMsg>], ) { @@ -178,32 +177,29 @@ fn start_broadcasting_thread( } RouterThreadMessage::ModuleMessage(msg) => match msg { DursMsg::Stop => break, - DursMsg::Event { event_type, .. } => { + DursMsg::Event { + event_from, + event_type, + .. + } => { // the node to be started less than MAX_REGISTRATION_DELAY seconds ago, // keep the message in memory to be able to send it back to modules not yet plugged - store_msg_in_pool( - start_time, - run_duration_in_secs, - msg.clone(), - &mut pool_msgs, - ); + store_msg_in_pool(start_time, msg.clone(), &mut pool_msgs); // Get list of receivers let receivers = events_subscriptions .get(&event_type) .unwrap_or(&Vec::with_capacity(0)) - .to_vec(); + .iter() + .filter(|module_static_name| **module_static_name != event_from) + .cloned() + .collect::<Vec<ModuleStaticName>>(); // Send msg to receivers send_msg_to_several_receivers(msg, &receivers, &modules_senders) } DursMsg::Request { req_to: role, .. } => { // If the node to be started less than MAX_REGISTRATION_DELAY seconds ago, // keep the message in memory to be able to send it back to modules not yet plugged - store_msg_in_pool( - start_time, - run_duration_in_secs, - msg.clone(), - &mut pool_msgs, - ); + store_msg_in_pool(start_time, msg.clone(), &mut pool_msgs); // Get list of receivers let receivers = roles.get(&role).unwrap_or(&Vec::with_capacity(0)).to_vec(); @@ -288,16 +284,14 @@ fn send_msg_to_several_receivers( /// keep the message in memory to be able to send it back to modules not yet plugged fn store_msg_in_pool( start_time: SystemTime, - run_duration_in_secs: u64, msg: DursMsg, pool_msgs: &mut HashMap<DursMsgReceiver, Vec<DursMsg>>, ) { - if run_duration_in_secs > 0 - && SystemTime::now() - .duration_since(start_time) - .expect("Duration error !") - .as_secs() - < *MAX_REGISTRATION_DELAY + if SystemTime::now() + .duration_since(start_time) + .expect("Duration error !") + .as_secs() + < *MAX_REGISTRATION_DELAY { let msg_recv = match msg { DursMsg::Event { event_type, .. } => Some(DursMsgReceiver::Event(event_type)), @@ -339,12 +333,7 @@ pub fn start_router( // Create broadcasting thread thread::spawn(move || { - start_broadcasting_thread( - start_time, - run_duration_in_secs, - &broadcasting_receiver, - &external_followers, - ); + start_broadcasting_thread(start_time, &broadcasting_receiver, &external_followers); }); // Create conf thread channel