using try_send now, because yoda was wrong. Try is better than do

main
Kyle Johnsen 2022-02-22 01:09:59 -05:00
parent cfc6a0720a
commit 68b334f33c
1 changed files with 12 additions and 13 deletions

View File

@ -10,7 +10,6 @@ use std::sync::mpsc;
use std::sync::mpsc::{SyncSender,Receiver}; use std::sync::mpsc::{SyncSender,Receiver};
use chrono::Local; use chrono::Local;
use std::fs; use std::fs;
use std::fmt;
use std::time; use std::time;
use serde::{Serialize, Deserialize}; use serde::{Serialize, Deserialize};
enum ToClientTCPMessageType { enum ToClientTCPMessageType {
@ -123,7 +122,7 @@ fn read_login_message(stream: &mut TcpStream, client: &Arc<Client>) {
write_buf.push(ToClientTCPMessageType::LoggedIn as u8); write_buf.push(ToClientTCPMessageType::LoggedIn as u8);
write_buf.extend_from_slice(&(client.id).to_be_bytes()); //send the client the id write_buf.extend_from_slice(&(client.id).to_be_bytes()); //send the client the id
client.sender.send(write_buf).unwrap(); client.sender.try_send(write_buf).unwrap();
} }
//this is in response to a request for rooms. //this is in response to a request for rooms.
@ -156,7 +155,7 @@ fn read_rooms_message(_stream: &mut TcpStream, client: &Arc<Client>){
let message_len = message_bytes.len() as u32; let message_len = message_bytes.len() as u32;
write_buf.extend_from_slice(&(message_len).to_be_bytes()); write_buf.extend_from_slice(&(message_len).to_be_bytes());
write_buf.extend_from_slice(message_bytes); write_buf.extend_from_slice(message_bytes);
client.sender.send(write_buf).unwrap(); client.sender.try_send(write_buf).unwrap();
} }
@ -194,7 +193,7 @@ fn read_roomdata_message(stream: &mut TcpStream, client: &Arc<Client>){
write_buf.push(username_bytes.len() as u8); write_buf.push(username_bytes.len() as u8);
write_buf.extend_from_slice(&username_bytes); write_buf.extend_from_slice(&username_bytes);
} }
client.sender.send(write_buf).unwrap(); client.sender.try_send(write_buf).unwrap();
} }
} }
@ -205,7 +204,7 @@ fn send_client_master_message(to: &Arc<Client>, master_id: u32){
let mut write_buf = vec![]; let mut write_buf = vec![];
write_buf.push(ToClientTCPMessageType::MasterMessage as u8); write_buf.push(ToClientTCPMessageType::MasterMessage as u8);
write_buf.extend_from_slice(&(master_id).to_be_bytes()); //send everyone that the client id joined the room write_buf.extend_from_slice(&(master_id).to_be_bytes()); //send everyone that the client id joined the room
let res = to.sender.send(write_buf); let res = to.sender.try_send(write_buf);
match res { match res {
Ok(_) => (), Ok(_) => (),
Err(_) => () Err(_) => ()
@ -220,7 +219,7 @@ fn send_client_join_message(to: &Arc<Client>, from: u32, room: &str){
write_buf.extend_from_slice(&(from).to_be_bytes()); //send everyone that the client id joined the room write_buf.extend_from_slice(&(from).to_be_bytes()); //send everyone that the client id joined the room
write_buf.push(room.as_bytes().len() as u8); write_buf.push(room.as_bytes().len() as u8);
write_buf.extend_from_slice(room.as_bytes()); write_buf.extend_from_slice(room.as_bytes());
let res = to.sender.send(write_buf); let res = to.sender.try_send(write_buf);
match res { match res {
Ok(_) => (), Ok(_) => (),
Err(_) => () Err(_) => ()
@ -237,7 +236,7 @@ fn send_you_joined_message(to: &Arc<Client>, in_room: Vec<u32>, room: &str){
} }
write_buf.push(room.as_bytes().len() as u8); write_buf.push(room.as_bytes().len() as u8);
write_buf.extend_from_slice(room.as_bytes()); write_buf.extend_from_slice(room.as_bytes());
let res = to.sender.send(write_buf); let res = to.sender.try_send(write_buf);
match res { match res {
Ok(_) => (), Ok(_) => (),
Err(_) => () Err(_) => ()
@ -249,7 +248,7 @@ fn send_you_left_message(to: &Arc<Client>, room: &str){
write_buf.push(ToClientTCPMessageType::YouLeft as u8); write_buf.push(ToClientTCPMessageType::YouLeft as u8);
write_buf.push(room.as_bytes().len() as u8); write_buf.push(room.as_bytes().len() as u8);
write_buf.extend_from_slice(room.as_bytes()); write_buf.extend_from_slice(room.as_bytes());
let res = to.sender.send(write_buf); let res = to.sender.try_send(write_buf);
match res { match res {
Ok(_) => (), Ok(_) => (),
Err(_) => () Err(_) => ()
@ -261,7 +260,7 @@ fn send_client_left_message(to: &Arc<Client>, from: u32, room: &str){
write_buf.extend_from_slice(&(from).to_be_bytes()); //send everyone that the client id left the room write_buf.extend_from_slice(&(from).to_be_bytes()); //send everyone that the client id left the room
write_buf.push(room.as_bytes().len() as u8); write_buf.push(room.as_bytes().len() as u8);
write_buf.extend_from_slice(room.as_bytes()); write_buf.extend_from_slice(room.as_bytes());
let res = to.sender.send(write_buf); let res = to.sender.try_send(write_buf);
match res { match res {
Ok(_) => (), Ok(_) => (),
Err(_) => () Err(_) => ()
@ -460,7 +459,7 @@ fn send_room_message(sender: &Arc<Client>, message: &Vec<u8>, include_sender: bo
if !include_sender && v.id == sender.id { if !include_sender && v.id == sender.id {
continue; continue;
} }
match v.sender.send(write_buf.clone()){ match v.sender.try_send(write_buf.clone()){
Ok(_) => (), Ok(_) => (),
Err(x) => println!("{}: {}: Error sending to client {}: {}",Local::now().format("%Y-%m-%d %H:%M:%S"), v.application.read().unwrap().to_string(),v.id,x) Err(x) => println!("{}: {}: Error sending to client {}: {}",Local::now().format("%Y-%m-%d %H:%M:%S"), v.application.read().unwrap().to_string(),v.id,x)
} //this sometimes fails. } //this sometimes fails.
@ -477,7 +476,7 @@ fn send_room_message(sender: &Arc<Client>, message: &Vec<u8>, include_sender: bo
if !include_sender && v.id == sender.id { if !include_sender && v.id == sender.id {
continue; continue;
} }
match v.sender.send(write_buf.clone()){ match v.sender.try_send(write_buf.clone()){
Ok(_) => (), Ok(_) => (),
Err(x) => println!("{}: {}: Error sending to client {}: {}",Local::now().format("%Y-%m-%d %H:%M:%S"),v.application.read().unwrap().to_string(),v.id,x) Err(x) => println!("{}: {}: Error sending to client {}: {}",Local::now().format("%Y-%m-%d %H:%M:%S"),v.application.read().unwrap().to_string(),v.id,x)
} //this sometimes fails. } //this sometimes fails.
@ -501,7 +500,7 @@ fn send_group_message(sender: &Arc<Client>, message: &Vec<u8>, group: &String){
for c in group { for c in group {
//there may be a leftover when a client leaves...will fix itself //there may be a leftover when a client leaves...will fix itself
match c.sender.send(write_buf.clone()) { match c.sender.try_send(write_buf.clone()) {
Ok(_) => (), Ok(_) => (),
Err(_) => () Err(_) => ()
} }
@ -657,7 +656,7 @@ fn handle_client(stream: TcpStream, client_id: u32, clients_mutex: Arc<RwLock<Ha
Err(_)=>() Err(_)=>()
} }
match client.sender.send(vec![0]){ //force send thread to exit match client.sender.try_send(vec![0]){ //force send thread to exit
Ok(_)=>(), Ok(_)=>(),
Err(_)=>() Err(_)=>()
} }