From fe4b7df778f78342b68af90f24176563e3a04951 Mon Sep 17 00:00:00 2001 From: Shaun Taheri Date: Mon, 24 Oct 2016 14:14:12 +0200 Subject: Fix blocking Websocket gateway listen call --- src/gateway/websocket.rs | 20 +++++++++++++------- 1 file 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) -> 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)) } -- cgit v1.2.1