chat_client/
chat_client.rs1use std::{
2 io::stdin,
3 sync::{Arc, RwLock},
4 time::Duration,
5};
6
7use nautilus_sockets::prelude::*;
8
9fn main() {
10 let socket = Arc::new(RwLock::new(
11 NautSocket::<NautClient>::new("127.0.0.1:0").unwrap(),
12 ));
13
14 let mut name: Option<String> = None;
15 {
16 let Ok(mut socket) = socket.write() else {
17 return;
18 };
19
20 socket.connect_to("127.0.0.1:8008").unwrap();
21
22 socket.on("recv_message", |_client, (_addr, bytes)| {
23 let msg = String::from_utf8(bytes.to_vec()).unwrap();
24 println!("{}", msg);
25 });
26 }
27
28 let socket_clone = Arc::clone(&socket);
29 std::thread::spawn(move || loop {
31 std::thread::sleep(Duration::from_millis(1));
32
33 let Ok(mut socket) = socket_clone.write() else {
34 continue;
35 };
36
37 socket.poll();
39 socket.run_events();
40 });
41
42 loop {
43 if name.as_ref().is_none() {
44 let mut s = String::new();
45 println!("Enter your name: ");
46 stdin().read_line(&mut s).expect("Invalid string");
47
48 if let Some('\n') = s.chars().next_back() {
49 s.pop();
50 }
51
52 if let Some('\r') = s.chars().next_back() {
53 s.pop();
54 }
55
56 name = Some(s.clone());
57
58 let Ok(mut client) = socket.write() else {
60 continue;
61 };
62 let _ = client.send("new_messenger", s.as_bytes(), PacketDelivery::Reliable);
63 continue;
64 }
65
66 let mut s = String::new();
67 stdin().read_line(&mut s).expect("Invalid string");
68
69 if let Some('\n') = s.chars().next_back() {
70 s.pop();
71 }
72
73 if let Some('\r') = s.chars().next_back() {
74 s.pop();
75 }
76
77 let Ok(mut client) = socket.write() else {
79 continue;
80 };
81 let _ = client.send("send_message", s.as_bytes(), PacketDelivery::Reliable);
82 }
83}