• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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