blitz-ws 0.1.0

Minimal stream-based WebSocket library
Documentation
use std::{net::TcpListener, thread::spawn};

use blitz::{
    accept_header,
    handshake::server::{Request, Response},
    stream::SimplifiedStream,
};

fn main() {
    let server = TcpListener::bind("0.0.0.0:8080").unwrap();

    for stream in server.incoming() {
        spawn(move || {
            let cb = |req: &Request, mut res: Response| {
                println!("Received a new WebSocket handshake!");
                println!("The request's path is: {}", req.uri().path());
                println!("The request's headers are:");
                for (header, _) in req.headers() {
                    println!("* {header}");
                }

                let headers = res.headers_mut();
                headers.append("Some-Header-1", "Some-Value-2".parse().unwrap());
                headers.append("Some-Header-2", "Some-Value-2".parse().unwrap());

                Ok(res)
            };

            let mut ws = accept_header(SimplifiedStream::Plain(stream.unwrap()), cb)
                .expect("Handshake failed");

            loop {
                let msg = ws.read().expect("Failed to read message");
                if msg.is_data() {
                    ws.send(msg).expect("Failed to send message");
                }
            }
        });
    }
}