Complete workflow, cowboy style

This commit is contained in:
Bastian Gruber 2023-04-29 10:01:48 +02:00
parent 7e90fae353
commit 95e74b194c
No known key found for this signature in database
GPG key ID: BE9F8C772B188CBF

View file

@ -17,8 +17,12 @@ type Error = Box<dyn std::error::Error + Send + Sync>;
type Result<T> = std::result::Result<T, Error>; type Result<T> = std::result::Result<T, Error>;
type Username = String; type Username = String;
type Message = String;
type Address = SocketAddr; type Address = SocketAddr;
#[derive(Clone, Debug, Default)]
struct BroadcastMessage(Username, Message);
#[derive(Clone, Debug, Default)] #[derive(Clone, Debug, Default)]
struct Users(Arc<Mutex<HashMap<Username, Address>>>); struct Users(Arc<Mutex<HashMap<Username, Address>>>);
@ -59,7 +63,11 @@ async fn main() -> Result<()> {
info!("Adding username: {username} to db"); info!("Adding username: {username} to db");
let _ = framed.send(message).await; let _ = framed.send(message).await;
info!("Send message to client"); info!("Send message to client");
let _ = tx.send(format!("* {} has entered the room", username)); let b = BroadcastMessage(
username.clone(),
format!("* {} has entered the room", username),
);
let _ = tx.send(b);
} }
Some(Err(e)) => { Some(Err(e)) => {
error!("Error parsing message: {e}"); error!("Error parsing message: {e}");
@ -76,7 +84,9 @@ async fn main() -> Result<()> {
Some(Ok(n)) => { Some(Ok(n)) => {
// broadcast message to all clients except the one who sent it // broadcast message to all clients except the one who sent it
info!("Receiving new chat message: {n}"); info!("Receiving new chat message: {n}");
let _ = tx.send(format!("[{}]: {}", name, n)); let b =
BroadcastMessage(name.clone(), format!("[{}]: {}", name, n));
let _ = tx.send(b);
} }
Some(Err(e)) => { Some(Err(e)) => {
error!("Error receiving chat message: {e}"); error!("Error receiving chat message: {e}");
@ -86,14 +96,20 @@ async fn main() -> Result<()> {
// remove client from db etc. // remove client from db etc.
// send leave message // send leave message
info!("No next frame"); info!("No next frame");
let _ = tx.send(format!("* {} has left the room", name)); let b =
BroadcastMessage(name.clone(), format!("* {} has left the room", name));
let _ = tx.send(b);
break; break;
} }
} }
} }
message = rx.recv() => { message = rx.recv() => {
let broadcast = message.clone().unwrap();
info!("Broadcast received: {:?}", message.clone().unwrap()); info!("Broadcast received: {:?}", message.clone().unwrap());
let _ = framed.send(message.unwrap()).await; if broadcast.0 != name {
let _ = framed.send(message.unwrap().1).await;
}
} }
} }
} }