mirror of https://gitlab.com/litecord/litecord.git
HEARTBEAT_ACK, READY, and basic IDENTIFY
This commit is contained in:
parent
7d8488adc7
commit
70a0379615
|
|
@ -65,6 +65,9 @@ class Config:
|
||||||
|
|
||||||
#: Postgres credentials
|
#: Postgres credentials
|
||||||
POSTGRES = {}
|
POSTGRES = {}
|
||||||
|
|
||||||
|
#: Shared secret for LVSP
|
||||||
|
LVSP_SECRET = ""
|
||||||
|
|
||||||
|
|
||||||
class Development(Config):
|
class Development(Config):
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,9 @@ from typing import Dict
|
||||||
import websockets
|
import websockets
|
||||||
from logbook import Logger
|
from logbook import Logger
|
||||||
|
|
||||||
|
import hmac
|
||||||
|
import hashlib
|
||||||
|
|
||||||
from litecord.voice.lvsp_opcodes import OPCodes as OP, InfoTable, InfoReverse
|
from litecord.voice.lvsp_opcodes import OPCodes as OP, InfoTable, InfoReverse
|
||||||
|
|
||||||
log = Logger(__name__)
|
log = Logger(__name__)
|
||||||
|
|
@ -59,7 +62,7 @@ class LVSPConnection:
|
||||||
"""Receive a payload."""
|
"""Receive a payload."""
|
||||||
assert self.conn is not None
|
assert self.conn is not None
|
||||||
msg = await self.conn.recv()
|
msg = await self.conn.recv()
|
||||||
msg = json.dumps(msg)
|
msg = json.loads(msg)
|
||||||
return msg
|
return msg
|
||||||
|
|
||||||
async def send_op(self, opcode: int, data: dict):
|
async def send_op(self, opcode: int, data: dict):
|
||||||
|
|
@ -100,10 +103,17 @@ class LVSPConnection:
|
||||||
"""Handle HELLO message."""
|
"""Handle HELLO message."""
|
||||||
data = msg["d"]
|
data = msg["d"]
|
||||||
|
|
||||||
# nonce = data['nonce']
|
nonce = data['nonce']
|
||||||
|
|
||||||
self._hb_interval = data["heartbeat_interval"]
|
self._hb_interval = data["heartbeat_interval"]
|
||||||
|
|
||||||
# TODO: send identify
|
# actually do this
|
||||||
|
shared_secret = "deez nutz"
|
||||||
|
deez = hmac.new(shared_secret.encode(), nonce.encode(), hashlib.sha256).hexdigest()
|
||||||
|
|
||||||
|
await self.send_op(OP.identify, {
|
||||||
|
"token": deez
|
||||||
|
})
|
||||||
|
|
||||||
async def _update_health(self, new_health: float):
|
async def _update_health(self, new_health: float):
|
||||||
"""Update the health value of a given voice server."""
|
"""Update the health value of a given voice server."""
|
||||||
|
|
@ -112,7 +122,7 @@ class LVSPConnection:
|
||||||
await self.app.db.execute(
|
await self.app.db.execute(
|
||||||
"""
|
"""
|
||||||
UPDATE voice_servers
|
UPDATE voice_servers
|
||||||
SET health = $1
|
SET last_health = $1
|
||||||
WHERE hostname = $2
|
WHERE hostname = $2
|
||||||
""",
|
""",
|
||||||
new_health,
|
new_health,
|
||||||
|
|
@ -124,13 +134,17 @@ class LVSPConnection:
|
||||||
|
|
||||||
We only start heartbeating after READY.
|
We only start heartbeating after READY.
|
||||||
"""
|
"""
|
||||||
await self._update_health(msg["health"])
|
data = msg["d"]
|
||||||
|
|
||||||
|
await self._update_health(data["health"])
|
||||||
self._start_hb()
|
self._start_hb()
|
||||||
|
|
||||||
async def _handle_5(self, msg):
|
async def _handle_5(self, msg):
|
||||||
"""Handle HEARTBEAT_ACK."""
|
"""Handle HEARTBEAT_ACK."""
|
||||||
self._stop_hb()
|
self._stop_hb()
|
||||||
await self._update_health(msg["health"])
|
data = msg["d"]
|
||||||
|
|
||||||
|
await self._update_health(data["health"])
|
||||||
self._start_hb()
|
self._start_hb()
|
||||||
|
|
||||||
async def _handle_6(self, msg):
|
async def _handle_6(self, msg):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue