From 983308aabebf3cc5628be0d7b6ee0b8de1deb73c Mon Sep 17 00:00:00 2001 From: Kyle Johnsen Date: Mon, 14 Mar 2022 15:07:24 -0400 Subject: [PATCH] untested hotfix --- src/main.rs | 82 +++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 60 insertions(+), 22 deletions(-) diff --git a/src/main.rs b/src/main.rs index 5bbca05..a0319f3 100644 --- a/src/main.rs +++ b/src/main.rs @@ -18,6 +18,7 @@ use chrono::Local; use std::time; use serde::{Serialize, Deserialize}; use std::error::Error; +use std::ptr; enum ToClientTCPMessageType { LoggedIn = 0, RoomList = 1, @@ -393,23 +394,50 @@ async fn process_udp(socket: Rc>,clients: Rc>, message: &Vec, rooms: Rc>, message: &Vec, group: &String){ let mut write_buf = vec![]; - let sender_ref = sender.borrow(); + let mut sender_ref = sender.borrow_mut(); write_buf.push(ToClientTCPMessageType::DataMessage as u8); write_buf.extend_from_slice(&sender_ref.id.to_be_bytes()); write_buf.extend_from_slice(&(message.len() as u32).to_be_bytes()); write_buf.extend_from_slice(message); //get the list of client ids for this group - let groups = &sender_ref.groups; - if groups.contains_key(group) { - let group = groups.get(group).unwrap(); - for c in group { - let mut temp_mut = c.borrow_mut(); - temp_mut.message_queue.extend_from_slice(&write_buf); - temp_mut.notify.notify(); - } + let mut send_to_client = false; + if sender_ref.groups.contains_key(group) { + let group = sender_ref.groups.get(group).unwrap(); + for c in group { + if ptr::eq(sender.as_ref(),c.as_ref()){ + send_to_client = true; + } + else{ + let mut temp_mut = c.borrow_mut(); + temp_mut.message_queue.extend_from_slice(&write_buf); + temp_mut.notify.notify(); + } + } + } + + if send_to_client { + sender_ref.message_queue.extend_from_slice(&write_buf); + sender_ref.notify.notify(); } }