| use std::{ | |
| net::{TcpListener, TcpStream}, | |
| thread::spawn, | |
| }; | |
| use log::*; | |
| use tungstenite::{accept, handshake::HandshakeRole, Error, HandshakeError, Message, Result}; | |
| fn must_not_block<Role: HandshakeRole>(err: HandshakeError<Role>) -> Error { | |
| match err { | |
| HandshakeError::Interrupted(_) => panic!("Bug: blocking socket would block"), | |
| HandshakeError::Failure(f) => f, | |
| } | |
| } | |
| fn handle_client(stream: TcpStream) -> Result<()> { | |
| let mut socket = accept(stream).map_err(must_not_block)?; | |
| info!("Running test"); | |
| loop { | |
| match socket.read()? { | |
| msg @ Message::Text(_) | msg @ Message::Binary(_) => { | |
| socket.send(msg)?; | |
| } | |
| Message::Ping(_) | Message::Pong(_) | Message::Close(_) | Message::Frame(_) => {} | |
| } | |
| } | |
| } | |
| fn main() { | |
| env_logger::init(); | |
| let server = TcpListener::bind("127.0.0.1:9002").unwrap(); | |
| for stream in server.incoming() { | |
| spawn(move || match stream { | |
| Ok(stream) => { | |
| if let Err(err) = handle_client(stream) { | |
| match err { | |
| Error::ConnectionClosed | Error::Protocol(_) | Error::Utf8 => (), | |
| e => error!("test: {}", e), | |
| } | |
| } | |
| } | |
| Err(e) => error!("Error accepting stream: {}", e), | |
| }); | |
| } | |
| } |