diff options
| author | Zeyla Hellyer <[email protected]> | 2018-01-01 09:45:52 -0800 |
|---|---|---|
| committer | Zeyla Hellyer <[email protected]> | 2018-01-01 09:45:52 -0800 |
| commit | f5a60f387d2278aa3bddac5c0a0ec110fbf5377e (patch) | |
| tree | a5a73e305c50a3e33ef7e99dab6818fae3bb4a15 /src/client/bridge/gateway/shard_runner.rs | |
| parent | Derive Hash, impl Display on ConnectionStage (diff) | |
| download | serenity-f5a60f387d2278aa3bddac5c0a0ec110fbf5377e.tar.xz serenity-f5a60f387d2278aa3bddac5c0a0ec110fbf5377e.zip | |
Expose a method of retrieving shard status/latency
This exposes a method of retrieving a shard's status and latency through
the Shard Manager, as part of the existing Shard Runner Info struct. The
Shard Runner will update this whenever it notices a change.
Diffstat (limited to 'src/client/bridge/gateway/shard_runner.rs')
| -rw-r--r-- | src/client/bridge/gateway/shard_runner.rs | 28 |
1 files changed, 27 insertions, 1 deletions
diff --git a/src/client/bridge/gateway/shard_runner.rs b/src/client/bridge/gateway/shard_runner.rs index cff8d7e..7c6cf83 100644 --- a/src/client/bridge/gateway/shard_runner.rs +++ b/src/client/bridge/gateway/shard_runner.rs @@ -141,8 +141,16 @@ impl<H: EventHandler + Send + Sync + 'static> ShardRunner<H> { } } + let pre = self.shard.stage(); + let (event, action, successful) = self.recv_event(); + let post = self.shard.stage(); + + if post != pre { + self.update_manager(); + } + match action { Some(ShardAction::Reconnect(ReconnectType::Reidentify)) => { return self.request_restart() @@ -249,7 +257,8 @@ impl<H: EventHandler + Send + Sync + 'static> ShardRunner<H> { true }, - ShardManagerMessage::ShutdownInitiated => { + ShardManagerMessage::ShardUpdate { .. } + | ShardManagerMessage::ShutdownInitiated => { // nb: not sent here true @@ -411,6 +420,13 @@ impl<H: EventHandler + Send + Sync + 'static> ShardRunner<H> { }, }; + match event { + Ok(GatewayEvent::HeartbeatAck) => { + self.update_manager(); + }, + _ => {}, + } + let event = match event { Ok(GatewayEvent::Dispatch(_, event)) => Some(event), _ => None, @@ -420,6 +436,8 @@ impl<H: EventHandler + Send + Sync + 'static> ShardRunner<H> { } fn request_restart(&self) -> Result<()> { + self.update_manager(); + debug!( "[ShardRunner {:?}] Requesting restart", self.shard.shard_info(), @@ -430,4 +448,12 @@ impl<H: EventHandler + Send + Sync + 'static> ShardRunner<H> { Ok(()) } + + fn update_manager(&self) { + let _ = self.manager_tx.send(ShardManagerMessage::ShardUpdate { + id: ShardId(self.shard.shard_info()[0]), + latency: self.shard.latency(), + stage: self.shard.stage(), + }); + } } |