gateway.websocket: give random heartbeat_interval

This commit is contained in:
Luna Mendes 2018-09-12 21:27:19 -03:00
parent 25cd85d704
commit bfa0e61a0c
1 changed files with 12 additions and 11 deletions

View File

@ -3,6 +3,7 @@ import collections
import pprint import pprint
import zlib import zlib
from typing import List, Dict, Any from typing import List, Dict, Any
from random import randint
import earl import earl
import websockets import websockets
@ -98,7 +99,8 @@ class GatewayWebsocket:
await self.send({ await self.send({
'op': OP.HELLO, 'op': OP.HELLO,
'd': { 'd': {
'heartbeat_interval': 45000, # random heartbeat intervals
'heartbeat_interval': randint(40, 46) * 1000,
'_trace': [ '_trace': [
'lesbian-server' 'lesbian-server'
], ],
@ -231,6 +233,8 @@ class GatewayWebsocket:
await self.dispatch('READY', {**{ await self.dispatch('READY', {**{
'v': 6, 'v': 6,
'user': user, 'user': user,
# TODO: dms
'private_channels': [], 'private_channels': [],
'guilds': guilds, 'guilds': guilds,
'session_id': self.state.session_id, 'session_id': self.state.session_id,
@ -368,7 +372,7 @@ class GatewayWebsocket:
async def _handle_5(self, payload: Dict[str, Any]): async def _handle_5(self, payload: Dict[str, Any]):
"""Handle OP 5 Voice Server Ping. """Handle OP 5 Voice Server Ping.
packet's d structure: packet's data structure:
{ {
delay: num, delay: num,
@ -379,7 +383,7 @@ class GatewayWebsocket:
""" """
pass pass
async def invalidate_session(self, resumable: bool = False): async def invalidate_session(self, resumable: bool = True):
"""Invalidate the current session and signal that """Invalidate the current session and signal that
to the client.""" to the client."""
await self.send({ await self.send({
@ -436,10 +440,7 @@ class GatewayWebsocket:
try: try:
state = self.ext.state_manager.fetch(user_id, sess_id) state = self.ext.state_manager.fetch(user_id, sess_id)
except KeyError: except KeyError:
return await self.send({ return await self.invalidate(False)
'op': 9,
'd': False,
})
if seq > state.seq: if seq > state.seq:
raise WebsocketClose(4007, 'Invalid seq') raise WebsocketClose(4007, 'Invalid seq')
@ -447,10 +448,7 @@ class GatewayWebsocket:
# check if a websocket isnt on that state already # check if a websocket isnt on that state already
if state.ws is not None: if state.ws is not None:
log.info('Resuming failed, websocket already connected') log.info('Resuming failed, websocket already connected')
return await self.send({ return await self.invalidate(False)
'op': 9,
'd': False,
})
# relink this connection # relink this connection
self.state = state self.state = state
@ -683,7 +681,10 @@ class GatewayWebsocket:
log.exception('An exception has occoured. state={}', self.state) log.exception('An exception has occoured. state={}', self.state)
await self.ws.close(code=4000, reason=repr(err)) await self.ws.close(code=4000, reason=repr(err))
finally: finally:
# TODO: move this to a heartbeat checker
# instead of websocket cleanup
self.ext.state_manager.remove(self.state) self.ext.state_manager.remove(self.state)
# disconnect the state from the websocket
if self.state: if self.state:
self.state.ws = None self.state.ws = None