HEARTBEAT_ACK, READY, and basic IDENTIFY

This commit is contained in:
Evie Viau 2022-02-17 22:22:59 -05:00
parent 7d8488adc7
commit 70a0379615
No known key found for this signature in database
GPG Key ID: DBCFB51C41FF87FF
2 changed files with 23 additions and 6 deletions

View File

@ -65,6 +65,9 @@ class Config:
#: Postgres credentials #: Postgres credentials
POSTGRES = {} POSTGRES = {}
#: Shared secret for LVSP
LVSP_SECRET = ""
class Development(Config): class Development(Config):

View File

@ -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):