diff options
| author | Zeyla Hellyer <[email protected]> | 2017-09-24 15:48:02 -0700 |
|---|---|---|
| committer | Zeyla Hellyer <[email protected]> | 2017-09-24 15:53:23 -0700 |
| commit | 6c43fed3702be3fdc1eafed26a2f6335acd71843 (patch) | |
| tree | e3dd142b36f221f33fb8e35c511bbf4e9e9471b6 /src/gateway | |
| parent | Use $crate for CommandError (diff) | |
| download | serenity-6c43fed3702be3fdc1eafed26a2f6335acd71843.tar.xz serenity-6c43fed3702be3fdc1eafed26a2f6335acd71843.zip | |
Add a shard manager
The shard manager will queue up shards for booting.
Diffstat (limited to 'src/gateway')
| -rw-r--r-- | src/gateway/shard.rs | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/gateway/shard.rs b/src/gateway/shard.rs index 571d522..890f56e 100644 --- a/src/gateway/shard.rs +++ b/src/gateway/shard.rs @@ -336,6 +336,10 @@ impl Shard { pub(crate) fn handle_event(&mut self, event: Result<GatewayEvent>) -> Result<Option<Event>> { match event { Ok(GatewayEvent::Dispatch(seq, event)) => { + if seq > self.seq + 1 { + warn!("[Shard {:?}] Heartbeat off; them: {}, us: {}", self.shard_info, seq, self.seq); + } + match event { Event::Ready(ref ready) => { self.session_id = Some(ready.ready.session_id.clone()); @@ -399,6 +403,8 @@ impl Shard { self.heartbeat_instants.1 = Some(Instant::now()); self.last_heartbeat_acknowledged = true; + trace!("[Shard {}] Received heartbeat ack", self.shard_info[0]); + Ok(None) }, Ok(GatewayEvent::Hello(interval)) => { @@ -758,12 +764,13 @@ impl Shard { self.heartbeat_instants.0 = Some(Instant::now()); self.last_heartbeat_acknowledged = false; + trace!("[{:02}] successfully heartbeated", self.shard_info[0]); + Ok(()) }, Err(why) => { match why { - Error::WebSocket(WebSocketError::IoError(err)) => if err.raw_os_error() != - Some(32) { + Error::WebSocket(WebSocketError::IoError(err)) => if err.raw_os_error() != Some(32) { debug!( "[Shard {:?}] Err w/ heartbeating: {:?}", self.shard_info, @@ -820,11 +827,14 @@ impl Shard { } // Otherwise, we're good to heartbeat. + trace!("[{:02}] heartbeating", self.shard_info[0]); + if let Err(why) = self.heartbeat() { warn!("[Shard {:?}] Err heartbeating: {:?}", self.shard_info, why); self.reconnect() } else { + trace!("[{:02}] heartbeated", self.shard_info[0]); self.heartbeat_instants.0 = Some(Instant::now()); Ok(()) @@ -924,6 +934,8 @@ impl Shard { }, }); + self.heartbeat_instants.0 = Some(Instant::now()); + self.client.send_json(&identification) } |