diff options
| author | Austin Hellyer <[email protected]> | 2016-12-20 00:57:12 +0800 |
|---|---|---|
| committer | Austin Hellyer <[email protected]> | 2016-12-29 11:50:53 -0800 |
| commit | 94fc85bd60b31c55231a9a0ed61101237c4cf989 (patch) | |
| tree | 9aef4b1d96c646dfbb1d9cdb6141edb0a7628a37 /src/client/mod.rs | |
| parent | Use conditional blocks over macros (diff) | |
| download | serenity-94fc85bd60b31c55231a9a0ed61101237c4cf989.tar.xz serenity-94fc85bd60b31c55231a9a0ed61101237c4cf989.zip | |
Round 1
Diffstat (limited to 'src/client/mod.rs')
| -rw-r--r-- | src/client/mod.rs | 39 |
1 files changed, 25 insertions, 14 deletions
diff --git a/src/client/mod.rs b/src/client/mod.rs index bbc2bc1..aed11a0 100644 --- a/src/client/mod.rs +++ b/src/client/mod.rs @@ -1187,16 +1187,23 @@ fn handle_shard(shard: Arc<Mutex<Shard>>, loop { let event = receiver.recv_json(GatewayEvent::decode); + // This will only lock when _updating_ the shard, resuming, etc. Most + // of the time, this won't be locked (i.e. when receiving an event over + // the receiver, separate from the shard itself). let event = match shard.lock().unwrap().handle_event(event, &mut receiver) { - Ok(Some(x)) => match x { - (event, Some(new_receiver)) => { - receiver = new_receiver; + Ok(Some((event, Some(new_receiver)))) => { + receiver = new_receiver; - event - }, - (event, None) => event, + event + }, + Ok(Some((event, None))) => event, + Ok(None) => continue, + Err(why) => { + // This is potentially causing problems -- let's see. + error!("Shard handler received err: {:?}", why); + + continue; }, - _ => continue, }; dispatch(event, @@ -1209,6 +1216,7 @@ fn handle_shard(shard: Arc<Mutex<Shard>>, } #[cfg(not(feature="framework"))] +// aaaaaaaaaaaaaaaaaaaaaaaaaaaaa fn handle_shard(shard: Arc<Mutex<Shard>>, data: Arc<Mutex<ShareMap>>, login_type: LoginType, @@ -1218,15 +1226,18 @@ fn handle_shard(shard: Arc<Mutex<Shard>>, let event = receiver.recv_json(GatewayEvent::decode); let event = match shard.lock().unwrap().handle_event(event, &mut receiver) { - Ok(Some(x)) => match x { - (event, Some(new_receiver)) => { - receiver = new_receiver; + Ok(Some((event, Some(new_receiver)))) => { + receiver = new_receiver; - event - }, - (event, None) => event, + event + }, + Ok(Some((event, None))) => event, + Ok(None) => continue, + Err(why) => { + error!("Shard handler received err: {:?}", why); + + continue; }, - _ => continue, }; dispatch(event, |