diff options
author | Shaun Taheri <shaun@advancedtelematic.com> | 2016-10-24 14:14:12 +0200 |
---|---|---|
committer | Shaun Taheri <shaun@advancedtelematic.com> | 2016-10-24 14:14:12 +0200 |
commit | fe4b7df778f78342b68af90f24176563e3a04951 (patch) | |
tree | 5e0d7b8d03fb852755a0a1c3f3aaf926e2b0490f | |
parent | f01087b25987fd6e7b356c7a62c9f49c720be825 (diff) | |
download | rvi_sota_client-fe4b7df778f78342b68af90f24176563e3a04951.tar.gz |
Fix blocking Websocket gateway listen call
-rw-r--r-- | src/gateway/websocket.rs | 20 |
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)) } |