use crossbeam::channel::Sender;
use log::debug;
use std::net::ToSocketAddrs;
use websocket::client::sync::Client as GenericClient;
use websocket::server::sync::Server as GenericServer;
use websocket::server::NoTlsAcceptor;
use websocket::stream::sync::TcpStream;
pub type Server = GenericServer<NoTlsAcceptor>;
pub type Client = GenericClient<TcpStream>;
fn get_connection(server: &mut Server) -> Option<Client> {
Some(server.accept().ok()?.accept().expect("Unable to accept"))
}
pub fn run<A: ToSocketAddrs>(addr: A, channel_out: Sender<Client>) -> ! {
let mut server = Server::bind(addr).expect("Unable to bind");
loop {
debug!("Waiting for connection");
if let Some(conn) = get_connection(&mut server) {
debug!("Connection accepted: {:?}", conn.peer_addr().unwrap());
channel_out.send(conn).expect("Send failed");
}
}
}