Skip to main content

terminal_client/
terminal_client.rs

1use rustwave::{Client, Result};
2use serde::Serialize;
3use std::io::Write;
4use tokio::io::{AsyncBufReadExt, BufReader};
5
6#[derive(Serialize)]
7struct ChatMessage {
8    room: String,
9    text: String,
10}
11
12#[tokio::main]
13async fn main() -> Result<()> {
14    let client = Client::connect("ws://127.0.0.1:8080").await?;
15
16    client.on("chat", |data| async move {
17        println!("Room message:> {}", data);
18    });
19
20    let room = "chat";
21    client.emit("join-room", room).await?;
22
23    let mut stdin = BufReader::new(tokio::io::stdin());
24
25    loop {
26        print!("you> ");
27        std::io::stdout().flush().unwrap();
28
29        let mut line = String::new();
30        if stdin.read_line(&mut line).await.unwrap() == 0 {
31            break; 
32        }
33
34        let text = line.trim().to_string();
35        if text.is_empty() {
36            continue;
37        }
38
39        let msg = ChatMessage {
40            room: room.to_string(),
41            text,
42        };
43        client.emit("chat", msg).await.unwrap();
44    }
45
46    Ok(())
47}