mirror of https://gitlab.com/litecord/litecord.git
gateway.websocket: give random heartbeat_interval
This commit is contained in:
parent
25cd85d704
commit
bfa0e61a0c
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue