aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAustin Hellyer <[email protected]>2017-01-15 11:42:25 -0800
committerAustin Hellyer <[email protected]>2017-01-15 11:42:25 -0800
commit3c19fc91b44b0fa2f0179f99797dec8ffa58d28e (patch)
treef000180cdb842ba651ea7c63b4254063d6af62da /src
parentReconnect on any websocket error (diff)
downloadserenity-3c19fc91b44b0fa2f0179f99797dec8ffa58d28e.tar.xz
serenity-3c19fc91b44b0fa2f0179f99797dec8ffa58d28e.zip
Don't reconnect on WS error within some time
Wait until at least one heartbeat has been sent before doing so.
Diffstat (limited to 'src')
-rw-r--r--src/client/gateway/shard.rs7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/client/gateway/shard.rs b/src/client/gateway/shard.rs
index ecf5c89..0b2b35f 100644
--- a/src/client/gateway/shard.rs
+++ b/src/client/gateway/shard.rs
@@ -12,6 +12,7 @@ use super::{GatewayError, GatewayStatus, prep};
use time;
use websocket::client::{Client as WsClient, Sender, Receiver};
use websocket::message::Message as WsMessage;
+use websocket::result::WebSocketError;
use websocket::stream::WebSocketStream;
use websocket::ws::sender::Sender as WsSender;
use ::constants::OpCode;
@@ -410,6 +411,12 @@ impl Shard {
self.reconnect(receiver).map(|(ev, rec)| Some((ev, Some(rec))))
},
Err(Error::WebSocket(why)) => {
+ if let WebSocketError::NoDataAvailable = why {
+ if self.heartbeat_instants.1.is_none() {
+ return Ok(None);
+ }
+ }
+
warn!("Websocket error: {:?}", why);
info!("Will attempt to reconnect or resume");