mirror of
https://github.com/rjNemo/tokio-chat-server
synced 2026-06-12 12:16:38 +00:00
basic chat server
This commit is contained in:
parent
870450c0e1
commit
80cb04fb71
1 changed files with 18 additions and 6 deletions
20
src/main.rs
20
src/main.rs
|
|
@ -1,12 +1,17 @@
|
||||||
use tokio::io::{AsyncBufReadExt, AsyncWriteExt, BufReader};
|
use tokio::io::{AsyncBufReadExt, AsyncWriteExt, BufReader};
|
||||||
use tokio::net::TcpListener;
|
use tokio::net::TcpListener;
|
||||||
|
use tokio::sync::broadcast;
|
||||||
|
|
||||||
#[tokio::main]
|
#[tokio::main]
|
||||||
async fn main() {
|
async fn main() {
|
||||||
let listener = TcpListener::bind("localhost:8080").await.unwrap();
|
let listener = TcpListener::bind("localhost:8080").await.unwrap();
|
||||||
|
let (tx, _) = broadcast::channel::<String>(10);
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let (mut socket, _addr) = listener.accept().await.unwrap();
|
let (mut socket, _) = listener.accept().await.unwrap();
|
||||||
|
|
||||||
|
let tx = tx.clone();
|
||||||
|
let mut rx = tx.subscribe();
|
||||||
|
|
||||||
tokio::spawn(async move {
|
tokio::spawn(async move {
|
||||||
let (reader, mut writer) = socket.split();
|
let (reader, mut writer) = socket.split();
|
||||||
|
|
@ -15,13 +20,20 @@ async fn main() {
|
||||||
let mut line = String::new();
|
let mut line = String::new();
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let bytes_read = reader.read_line(&mut line).await.unwrap();
|
tokio::select! {
|
||||||
if bytes_read == 0 {
|
result = reader.read_line(&mut line) =>{
|
||||||
|
if result.unwrap() == 0 {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
writer.write_all(&line.as_bytes()).await.unwrap();
|
tx.send(line.clone()).unwrap();
|
||||||
line.clear();
|
line.clear();
|
||||||
}
|
}
|
||||||
|
result = rx.recv() =>{
|
||||||
|
let message = result.unwrap();
|
||||||
|
writer.write_all(&message.as_bytes()).await.unwrap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue