using try_send now, because yoda was wrong. Try is better than do
parent
cfc6a0720a
commit
68b334f33c
25
src/main.rs
25
src/main.rs
|
|
@ -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(_)=>()
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue