websocket-stream
websocket-stream is a RFC-6455
wrapper for TcpStream
on POSIX-like kernels. It can be used in blocking or non-blocking mode.
I don't do enough Windows development to care about ensuring it is platform agnostic. Feel free to send me a pull request if you want to take the time to implement Windows sockets as well.
It achieves it's non-blocking state by setting the O_NONBLOCK
flag on the
stream's file descriptor.
Example Usage
extern crate websocket_stream as wss;
use wss::{WebsocketStream, ReadResult, WriteResult, Mode};
use wss::util::{OpCode, ReadError, WriteError};
fn some_function() {
let mut ws_stream = match WebsocketStream::new(stream, Mode::NonBlock) {
Ok(ws) => ws,
Err(e) => {
panic!("Websocket creation failed, errno: {}", e)
}
};
match ws_stream.read() {
Ok(res_tuple) => {
match res_tuple.0 {
OpCode::Continuation => handle_cont(res_tuple.1),
OpCode::Text => handle_text(res_tuple.1),
OpCode::Binary => handle_binary(res_tuple.1),
OpCode::Close => handle_close(res_tuple.1),
OpCode::Ping => handle_ping(res_tuple.1),
OpCode::Pong => handle_pong(res_tuple.1)
}
}
Err(e) => {
match e {
ReadError::EAGAIN => {
}
_ => {
}
}
}
}
let mut buf: Vec<u8> = Vec::new(); match ws_stream.write(OpCode::Text, &mut buf) {
Ok(num_written) => {
}
Err(e) => {
}
}
}