aboutsummaryrefslogtreecommitdiff
path: root/src/gateway
diff options
context:
space:
mode:
authorZeyla Hellyer <[email protected]>2017-09-24 15:48:02 -0700
committerZeyla Hellyer <[email protected]>2017-09-24 15:53:23 -0700
commit6c43fed3702be3fdc1eafed26a2f6335acd71843 (patch)
treee3dd142b36f221f33fb8e35c511bbf4e9e9471b6 /src/gateway
parentUse $crate for CommandError (diff)
downloadserenity-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.rs16
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)
}