1 use std::{net::TcpListener, thread::spawn};
2
3 use tungstenite::{
4 accept_hdr,
5 handshake::server::{Request, Response},
6 };
7
main()8 fn main() {
9 env_logger::init();
10 let server = TcpListener::bind("127.0.0.1:3012").unwrap();
11 for stream in server.incoming() {
12 spawn(move || {
13 let callback = |req: &Request, mut response: Response| {
14 println!("Received a new ws handshake");
15 println!("The request's path is: {}", req.uri().path());
16 println!("The request's headers are:");
17 for (ref header, _value) in req.headers() {
18 println!("* {header}");
19 }
20
21 // Let's add an additional header to our response to the client.
22 let headers = response.headers_mut();
23 headers.append("MyCustomHeader", ":)".parse().unwrap());
24 headers.append("SOME_TUNGSTENITE_HEADER", "header_value".parse().unwrap());
25
26 Ok(response)
27 };
28 let mut websocket = accept_hdr(stream.unwrap(), callback).unwrap();
29
30 loop {
31 let msg = websocket.read().unwrap();
32 if msg.is_binary() || msg.is_text() {
33 websocket.send(msg).unwrap();
34 }
35 }
36 });
37 }
38 }
39