diff --git a/src/commit.rs b/src/commit.rs index bef6cdc..aad4bf1 100644 --- a/src/commit.rs +++ b/src/commit.rs @@ -65,42 +65,49 @@ pub(crate) fn handle_commit_request(commit_msg: CommitMessage) -> Result Result<()> { + dump_cached_members()?; + // Send a handshake message to every connected client + if let Some(new_member) = lock_members().unwrap().get(&pairing_process_id) { + let our_sp_address = WALLET + .get() + .ok_or(Error::msg("Wallet not initialized"))? + .lock_anyhow()? + .get_sp_client() + .get_receiving_address(); + let mut new_member_map = HashMap::new(); + new_member_map.insert(pairing_process_id, new_member.clone()); + let init_msg = HandshakeMessage::new( + our_sp_address.into(), + OutPointMemberMap(new_member_map), + OutPointProcessMap(HashMap::new()), + CHAIN_TIP.load(std::sync::atomic::Ordering::SeqCst).into(), + ); + + if let Err(e) = broadcast_message( + AnkFlag::Handshake, + format!("{}", init_msg.to_string()), + BroadcastType::ToAll, + ) { + Err(Error::msg(format!("Failed to send handshake message: {}", e))) + } else { + Ok(()) + } + } else { + Err(Error::msg(format!( + "Failed to find new member with process id {}", + pairing_process_id + ))) + } +} + fn handle_new_process(commit_msg: &CommitMessage) -> Result { let pcd_commitment = &commit_msg.pcd_commitment; let merkle_root_bin = pcd_commitment.create_merkle_tree()?.root().unwrap(); if let Ok(pairing_process_id) = handle_member_list(&commit_msg) { - dump_cached_members()?; - // Send a handshake message to every connected client - if let Some(new_member) = lock_members().unwrap().get(&pairing_process_id) { - let our_sp_address = WALLET - .get() - .ok_or(Error::msg("Wallet not initialized"))? - .lock_anyhow()? - .get_sp_client() - .get_receiving_address(); - let mut new_member_map = HashMap::new(); - new_member_map.insert(pairing_process_id, new_member.clone()); - let init_msg = HandshakeMessage::new( - our_sp_address.into(), - OutPointMemberMap(new_member_map), - OutPointProcessMap(HashMap::new()), - ); - - if let Err(e) = broadcast_message( - AnkFlag::Handshake, - format!("{}", init_msg.to_string()), - BroadcastType::ToAll, - ) { - log::error!("Failed to send handshake message: {}", e); - } - } else { - log::error!( - "Failed to find new member with process id {}", - pairing_process_id - ); - } + send_members_update(pairing_process_id)?; } let mut new_process = Process::new(commit_msg.process_id); @@ -173,6 +180,11 @@ fn handle_existing_commitment( ); // If the validation succeed, we return a new tip process_validation(process_to_udpate, commit_msg)?; + + if let Ok(pairing_process_id) = handle_member_list(commit_msg) { + debug_assert_eq!(pairing_process_id, process_id); + send_members_update(process_id)?; + } } Ok(())