import createDebug from "debug"; import {Packet, PacketType} from "./protocol.ts"; const logger = createDebug("gateway"); export interface GatewayClient { socket: WebSocket; } export async function gateway_connect(url: string, username: string) { logger("connecting to gateway socket at " + url) let ws = await _websocket_connect(url); logger("connected to gateway, sending username and auth details"); let client: GatewayClient = { socket: ws }; let packet: Packet = { t: PacketType.ClientLogin, c: { username, jwt: null } }; ws.send(JSON.stringify(packet)); ws.onmessage = (e) => { let packet: Packet = JSON.parse(e.data); logger(packet); } return client; } let socket: WebSocket | undefined = undefined; function _websocket_connect(url: string): Promise { if (socket && socket.readyState < 2) { // reuse socket connection return Promise.resolve(socket); } return new Promise((resolve, reject) => { socket = new WebSocket(url); socket.onopen = () => { resolve(socket!); }; socket.onerror = (err) => { reject(err); }; }); }