Update members list and send message on update
This commit is contained in:
parent
0543b6974a
commit
45763102cc
@ -65,42 +65,49 @@ pub(crate) fn handle_commit_request(commit_msg: CommitMessage) -> Result<OutPoin
|
|||||||
Ok(commit_msg.process_id)
|
Ok(commit_msg.process_id)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn send_members_update(pairing_process_id: OutPoint) -> 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<Process> {
|
fn handle_new_process(commit_msg: &CommitMessage) -> Result<Process> {
|
||||||
let pcd_commitment = &commit_msg.pcd_commitment;
|
let pcd_commitment = &commit_msg.pcd_commitment;
|
||||||
|
|
||||||
let merkle_root_bin = pcd_commitment.create_merkle_tree()?.root().unwrap();
|
let merkle_root_bin = pcd_commitment.create_merkle_tree()?.root().unwrap();
|
||||||
|
|
||||||
if let Ok(pairing_process_id) = handle_member_list(&commit_msg) {
|
if let Ok(pairing_process_id) = handle_member_list(&commit_msg) {
|
||||||
dump_cached_members()?;
|
send_members_update(pairing_process_id)?;
|
||||||
// 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
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut new_process = Process::new(commit_msg.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
|
// If the validation succeed, we return a new tip
|
||||||
process_validation(process_to_udpate, commit_msg)?;
|
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(())
|
Ok(())
|
||||||
|
Loading…
x
Reference in New Issue
Block a user