extern crate websocket;
use std::thread;
use websocket::{Server, Message, Sender, Receiver};
use websocket::message::Type;
use websocket::header::WebSocketProtocol;
fn main() {
let server = Server::bind("127.0.0.1:2794").unwrap();
for connection in server {
thread::spawn(move || {
let request = connection.unwrap().read_request().unwrap(); let headers = request.headers.clone();
request.validate().unwrap();
let mut response = request.accept();
if let Some(&WebSocketProtocol(ref protocols)) = headers.get() {
if protocols.contains(&("rust-websocket".to_string())) {
response.headers.set(WebSocketProtocol(vec!["rust-websocket".to_string()]));
}
}
let mut client = response.send().unwrap();
let ip = client.get_mut_sender()
.get_mut()
.peer_addr()
.unwrap();
println!("Connection from {}", ip);
let message: Message = Message::text("Hello".to_string());
client.send_message(&message).unwrap();
let (mut sender, mut receiver) = client.split();
for message in receiver.incoming_messages() {
let message: Message = message.unwrap();
match message.opcode {
Type::Close => {
let message = Message::close();
sender.send_message(&message).unwrap();
println!("Client {} disconnected", ip);
return;
},
Type::Ping => {
let message = Message::pong(message.payload);
sender.send_message(&message).unwrap();
}
_ => sender.send_message(&message).unwrap(),
}
}
});
}
}