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