aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/client/dispatch.rs2
-rw-r--r--src/client/mod.rs16
2 files changed, 13 insertions, 5 deletions
diff --git a/src/client/dispatch.rs b/src/client/dispatch.rs
index 80b2061..ad40497 100644
--- a/src/client/dispatch.rs
+++ b/src/client/dispatch.rs
@@ -68,7 +68,7 @@ pub fn dispatch(event: Event,
}
#[cfg(not(feature="framework"))]
-pub fn dispatch(event: Result<Event>,
+pub fn dispatch(event: Event,
conn: Arc<Mutex<Connection>>,
login_type: LoginType,
event_store: Arc<Mutex<EventStore>>) {
diff --git a/src/client/mod.rs b/src/client/mod.rs
index 6b9be4c..ee99c64 100644
--- a/src/client/mod.rs
+++ b/src/client/mod.rs
@@ -1284,12 +1284,20 @@ fn handle_connection(connection: Arc<Mutex<Connection>>,
fn handle_connection(connection: Arc<Mutex<Connection>>,
login_type: LoginType,
event_store: Arc<Mutex<EventStore>>,
- receiver: Receiver<WebSocketStream>) {
+ mut receiver: Receiver<WebSocketStream>) {
loop {
- let event = {
- let mut connection = connection.lock().unwrap();
+ let event = receiver.recv_json(GatewayEvent::decode);
+
+ let event = match connection.lock().unwrap().handle_event(event, &mut receiver) {
+ Ok(Some(x)) => match x {
+ (event, Some(new_receiver)) => {
+ receiver = new_receiver;
- connection.receive()
+ event
+ },
+ (event, None) => event,
+ },
+ _ => continue,
};
dispatch(event,