Complete workflow, cowboy style
This commit is contained in:
parent
7e90fae353
commit
95e74b194c
1 changed files with 20 additions and 4 deletions
|
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue