aboutsummaryrefslogtreecommitdiff
path: root/src/client/mod.rs
diff options
context:
space:
mode:
authorAustin Hellyer <[email protected]>2016-12-20 00:57:12 +0800
committerAustin Hellyer <[email protected]>2016-12-29 11:50:53 -0800
commit94fc85bd60b31c55231a9a0ed61101237c4cf989 (patch)
tree9aef4b1d96c646dfbb1d9cdb6141edb0a7628a37 /src/client/mod.rs
parentUse conditional blocks over macros (diff)
downloadserenity-94fc85bd60b31c55231a9a0ed61101237c4cf989.tar.xz
serenity-94fc85bd60b31c55231a9a0ed61101237c4cf989.zip
Round 1
Diffstat (limited to 'src/client/mod.rs')
-rw-r--r--src/client/mod.rs39
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,