#[macro_use]
extern crate rouille_ng;
use std::thread;
use rouille_ng::websocket;
use rouille_ng::Response;
fn main() {
println!("Now listening on localhost:8000");
rouille_ng::start_server("localhost:8000", move |request| {
router!(request,
(GET) (/) => {
Response::html("<script type=\"text/javascript\">
var socket = new WebSocket(\"ws://localhost:8000/ws\", \"echo\");
function send(data) {{
socket.send(data);
}}
socket.onmessage = function(event) {{
document.getElementById('result').innerHTML += event.data + '<br />';
}}
</script>
<p>This example sends back everything you send to the server.</p>
<p><form onsubmit=\"send(document.getElementById('msg').value); return false;\">
<input type=\"text\" id=\"msg\" />
<button type=\"submit\">Send</button>
</form></p>
<p>Received: </p>
<p id=\"result\"></p>")
},
(GET) (/ws) => {
let (response, websocket) = try_or_400!(websocket::start(&request, Some("echo")));
thread::spawn(move || {
let ws = websocket.recv().unwrap();
websocket_handling_thread(ws);
});
response
},
_ => rouille_ng::Response::empty_404()
)
});
}
fn websocket_handling_thread(mut websocket: websocket::Websocket) {
while let Some(message) = websocket.next() {
match message {
websocket::Message::Text(txt) => {
println!("received {:?} from a websocket", txt);
websocket.send_text(&txt).unwrap();
}
websocket::Message::Binary(_) => {
println!("received binary from a websocket");
}
}
}
}