terminal_client/
terminal_client.rs1use 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}