|
|
@ -63,6 +63,7 @@ class KeepAliveHandler(threading.Thread): |
|
|
|
self.msg = 'Keeping websocket alive with sequence %s.' |
|
|
|
self._stop_ev = threading.Event() |
|
|
|
self._last_ack = time.time() |
|
|
|
self._last_send = time.time() |
|
|
|
|
|
|
|
def run(self): |
|
|
|
while not self._stop_ev.wait(self.interval): |
|
|
@ -88,6 +89,8 @@ class KeepAliveHandler(threading.Thread): |
|
|
|
f.result() |
|
|
|
except Exception: |
|
|
|
self.stop() |
|
|
|
else: |
|
|
|
self._last_send = time.time() |
|
|
|
|
|
|
|
def get_payload(self): |
|
|
|
return { |
|
|
@ -408,6 +411,12 @@ class DiscordWebSocket(websockets.client.WebSocketClientProtocol): |
|
|
|
for index in reversed(removed): |
|
|
|
del self._dispatch_listeners[index] |
|
|
|
|
|
|
|
@property |
|
|
|
def latency(self): |
|
|
|
"""float: Measures latency between a HEARTBEAT and a HEARTBEAT_ACK in seconds.""" |
|
|
|
heartbeat = self._keep_alive |
|
|
|
return float('inf') if heartbeat is None else heartbeat._last_ack - heartbeat._last_send |
|
|
|
|
|
|
|
def _can_handle_close(self, code): |
|
|
|
return code not in (1000, 4004, 4010, 4011) |
|
|
|
|
|
|
|