internal_server/
internal_server.rs1use log::*;
2use simple_websocket::handshake::perform_handshake;
3use std::net::SocketAddr;
4use tokio::net::{TcpListener, TcpStream};
5use tokio::select;
6
7async fn handle_connection(_: SocketAddr, stream: TcpStream) {
8 match perform_handshake(stream).await {
9 Ok(mut ws_connection) => loop {
10 select! {
11 Some(result) = ws_connection.read.recv() => {
12 match result {
13 Ok(message) => {
14 if ws_connection.send_data(message).await.is_err() {
15 eprintln!("Failed to send message");
16 break;
17 }
18 }
19 Err(err) => {
20 eprintln!("Received error from the stream: {}", err);
21 break;
22 }
23 }
24 }
25 else => break
26 }
27 },
28 Err(err) => eprintln!("Error when performing handshake: {}", err),
29 }
30}
31
32#[tokio::main]
33async fn main() {
34 env_logger::init();
35
36 let addr = "127.0.0.1:9002";
37 let listener = TcpListener::bind(&addr).await.expect("Can't listen");
38 info!("Listening on: {}", addr);
39
40 while let Ok((stream, _)) = listener.accept().await {
41 let peer = stream
42 .peer_addr()
43 .expect("connected streams should have a peer address");
44 info!("Peer address: {}", peer);
45
46 tokio::spawn(handle_connection(peer, stream));
47 }
48}