summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDennis Kobert <d-kobert@web.de>2019-05-31 04:17:35 +0200
committerDennis Kobert <d-kobert@web.de>2019-05-31 04:17:35 +0200
commit3f539662518609390964c60acf2f38d9a08aee6d (patch)
tree0ea940e718036d2d3dcebf80e2288228055fbccc
parent04792563e216f57984219e582de491947e2d7f40 (diff)
Extract connention loop to seperate funtion
-rw-r--r--game_server/src/scribble_group.rs38
1 files changed, 20 insertions, 18 deletions
diff --git a/game_server/src/scribble_group.rs b/game_server/src/scribble_group.rs
index 01090de..2eb16f2 100644
--- a/game_server/src/scribble_group.rs
+++ b/game_server/src/scribble_group.rs
@@ -33,24 +33,7 @@ impl Group for ScribbleGroup {
self.senders.lock().unwrap().insert(id, sen);
let senders_mutex = self.senders.clone();
let self_uid = id;
- std::thread::spawn(move || {
- loop {
- let message = match rec.recv_message() {
- Ok(x) => x,
- _ => break
- };
- //trace!("got message: '{:?}'", message);
- let mut senders = senders_mutex.lock().unwrap();
- for (uid, sender) in senders.iter_mut() {
- if self_uid != *uid {
- sender.send_message(&message)
- .unwrap_or_else(|_| debug!("tried to send message to {}, but failed", *uid));
- }
- }
- }
- senders_mutex.lock().unwrap().remove(&self_uid);
- info!("client {} has left", self_uid);
- });
+ std::thread::spawn(move || Self::broadcast_clients(self_uid, rec, senders_mutex));
}
}
@@ -58,4 +41,23 @@ impl ScribbleGroup {
pub fn new(id: GroupId, name: String) -> Self {
Self { id, name, senders: Arc::new(Mutex::new(HashMap::new())) }
}
+
+ fn broadcast_clients(self_uid: UserId, mut rec: ClientReceiver, senders_mutex: Arc<Mutex<HashMap<UserId, ClientSender>>>) {
+ loop {
+ let message = match rec.recv_message() {
+ Ok(x) => x,
+ _ => break
+ };
+ //trace!("got message: '{:?}'", message);
+ let mut senders = senders_mutex.lock().unwrap();
+ for (uid, sender) in senders.iter_mut() {
+ if self_uid != *uid {
+ sender.send_message(&message)
+ .unwrap_or_else(|_| debug!("tried to send message to {}, but failed", *uid));
+ }
+ }
+ }
+ senders_mutex.lock().unwrap().remove(&self_uid);
+ info!("client {} has left", self_uid);
+ }
}