aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--discord/client.py11
-rw-r--r--discord/gateway.py19
-rw-r--r--discord/shard.py7
3 files changed, 13 insertions, 24 deletions
diff --git a/discord/client.py b/discord/client.py
index 8cf5d00b..758ab217 100644
--- a/discord/client.py
+++ b/discord/client.py
@@ -361,17 +361,12 @@ class Client:
while not self.is_closed():
try:
yield from self.ws.poll_event()
- except (ReconnectWebSocket, ResumeWebSocket) as e:
- resume = type(e) is ResumeWebSocket
- log.info('Got ' + type(e).__name__)
-
- if not resume:
- self._ready.clear()
-
+ except ResumeWebSocket as e:
+ log.info('Got a request to RESUME the websocket.')
self.ws = yield from DiscordWebSocket.from_client(self, shard_id=self.shard_id,
session=self.ws.session_id,
sequence=self.ws.sequence,
- resume=resume)
+ resume=True)
except ConnectionClosed as e:
yield from self.close()
if e.code != 1000:
diff --git a/discord/gateway.py b/discord/gateway.py
index 9897ca42..e75370bc 100644
--- a/discord/gateway.py
+++ b/discord/gateway.py
@@ -41,15 +41,9 @@ import struct
log = logging.getLogger(__name__)
-__all__ = [ 'ReconnectWebSocket', 'DiscordWebSocket',
- 'KeepAliveHandler', 'VoiceKeepAliveHandler',
+__all__ = [ 'DiscordWebSocket', 'KeepAliveHandler', 'VoiceKeepAliveHandler',
'DiscordVoiceWebSocket', 'ResumeWebSocket' ]
-class ReconnectWebSocket(Exception):
- """Signals to handle the RECONNECT opcode."""
- def __init__(self, shard_id):
- self.shard_id = shard_id
-
class ResumeWebSocket(Exception):
"""Signals to initialise via RESUME opcode instead of IDENTIFY."""
def __init__(self, shard_id):
@@ -128,8 +122,8 @@ class DiscordWebSocket(websockets.client.WebSocketClientProtocol):
REQUEST_MEMBERS
Send only. Asks for the full member list of a guild.
INVALIDATE_SESSION
- Receive only. Tells the client to invalidate the session and IDENTIFY
- again.
+ Receive only. Tells the client to optionally invalidate the session
+ and IDENTIFY again.
HELLO
Receive only. Tells the client the heartbeat interval.
HEARTBEAT_ACK
@@ -306,7 +300,7 @@ class DiscordWebSocket(websockets.client.WebSocketClientProtocol):
# internal exception signalling to reconnect.
log.info('Received RECONNECT opcode.')
yield from self.close()
- raise ReconnectWebSocket(self.shard_id)
+ raise ResumeWebSocket(self.shard_id)
if op == self.HEARTBEAT_ACK:
return # disable noisy logging for now
@@ -323,12 +317,13 @@ class DiscordWebSocket(websockets.client.WebSocketClientProtocol):
return
if op == self.INVALIDATE_SESSION:
- self.sequence = None
- self.session_id = None
if data == True:
yield from self.close()
raise ResumeWebSocket(self.shard_id)
+ self.sequence = None
+ self.session_id = None
+ log.info('Shard ID %s has either failed a RESUME request or needed to invalidate its session.' % self.shard_id)
yield from self.identify()
return
diff --git a/discord/shard.py b/discord/shard.py
index 7bb3a201..dade454d 100644
--- a/discord/shard.py
+++ b/discord/shard.py
@@ -54,10 +54,9 @@ class Shard:
def poll(self):
try:
yield from self.ws.poll_event()
- except (ReconnectWebSocket, ResumeWebSocket) as e:
- resume = type(e) is ResumeWebSocket
- log.info('Got ' + type(e).__name__)
- self.ws = yield from DiscordWebSocket.from_client(self._client, resume=resume,
+ except ResumeWebSocket as e:
+ log.info('Got a request to RESUME the websocket.')
+ self.ws = yield from DiscordWebSocket.from_client(self._client, resume=True,
shard_id=self.id,
session=self.ws.session_id,
sequence=self.ws.sequence)