summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShaun Taheri <shaun@advancedtelematic.com>2016-10-24 14:14:12 +0200
committerShaun Taheri <shaun@advancedtelematic.com>2016-10-24 14:14:12 +0200
commitfe4b7df778f78342b68af90f24176563e3a04951 (patch)
tree5e0d7b8d03fb852755a0a1c3f3aaf926e2b0490f
parentf01087b25987fd6e7b356c7a62c9f49c720be825 (diff)
downloadrvi_sota_client-fe4b7df778f78342b68af90f24176563e3a04951.tar.gz
Fix blocking Websocket gateway listen call
-rw-r--r--src/gateway/websocket.rs20
1 files changed, 13 insertions, 7 deletions
diff --git a/src/gateway/websocket.rs b/src/gateway/websocket.rs
index f63a763..8c597b9 100644
--- a/src/gateway/websocket.rs
+++ b/src/gateway/websocket.rs
@@ -3,6 +3,7 @@ use chan::Sender;
use rustc_serialize::json;
use std::collections::HashMap;
use std::sync::{Arc, Mutex};
+use std::thread;
use ws;
use ws::{CloseCode, Handler, Handshake, Message, Sender as WsSender};
use ws::util::Token;
@@ -20,13 +21,18 @@ pub struct Websocket {
impl Gateway for Websocket {
fn initialize(&mut self, itx: Sender<Interpret>) -> Result<(), String> {
- ws::listen(&self.server.clone() as &str, |out| {
- WebsocketHandler {
- out: out,
- itx: itx.clone(),
- clients: self.clients.clone()
- }
- }).expect("couldn't start websocket listener");
+ let clients = self.clients.clone();
+ let addr = self.server.clone();
+
+ thread::spawn(move || {
+ ws::listen(&addr as &str, |out| {
+ WebsocketHandler {
+ out: out,
+ itx: itx.clone(),
+ clients: clients.clone()
+ }
+ }).expect("couldn't start websocket listener");
+ });
Ok(info!("Websocket gateway started at {}.", self.server))
}