summary refs log tree commit diff
diff options
context:
space:
mode:
authorFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-05-31 20:32:03 +0200
committerFlam3rboy <34555296+Flam3rboy@users.noreply.github.com>2021-05-31 20:32:03 +0200
commit5856047e3d518f10fc65d3a850567ea0719d236b (patch)
tree9ca76ec40777d2520abe252a4f6a686b7f5393d2
parent:art: create start.ts (diff)
downloadserver-5856047e3d518f10fc65d3a850567ea0719d236b.tar.xz
:sparkles: start.ts file
-rw-r--r--src/Server.ts32
-rw-r--r--src/opcodes/VoiceStateUpdate.ts15
-rw-r--r--src/start.ts7
3 files changed, 37 insertions, 17 deletions
diff --git a/src/Server.ts b/src/Server.ts

index 2f72cc00..a160ac1d 100644 --- a/src/Server.ts +++ b/src/Server.ts
@@ -4,25 +4,21 @@ dotenv.config(); import { Config, db } from "@fosscord/server-util"; import { Server as WebSocketServer } from "ws"; import { Connection } from "./events/Connection"; - -// TODO: only listen/start the server if everything got initalized -// https://www.npmjs.com/package/ws use "External HTTP/S server" and listen manually at the end of listen() - -var port = Number(process.env.PORT); -if (isNaN(port)) port = 3002; +import http from "http"; export class Server { public ws: WebSocketServer; - constructor() { - this.ws = new WebSocketServer({ - port, + public port: number; + public server: http.Server; + + constructor({ port, server }: { port: number; server: http.Server }) { + this.port = port; + if (server) this.server = server; + else this.server = http.createServer({}); + this.ws = new WebSocketServer({ maxPayload: 4096, - // perMessageDeflate: { - // zlibDeflateOptions: { - // chunkSize: 65536, - // }, - // }, + server: this.server, }); this.ws.on("connection", Connection); } @@ -38,6 +34,12 @@ export class Server { await this.setupSchema(); await Config.init(); console.log("[DB] connected"); - console.log(`[Gateway] online on 0.0.0.0:${port}`); + this.server.listen(this.port); + console.log(`[Gateway] online on 0.0.0.0:${this.port}`); + } + + async stop() { + await db.close(); + this.server.close(); } } diff --git a/src/opcodes/VoiceStateUpdate.ts b/src/opcodes/VoiceStateUpdate.ts
index f2230cd9..0d51513d 100644 --- a/src/opcodes/VoiceStateUpdate.ts +++ b/src/opcodes/VoiceStateUpdate.ts
@@ -1,5 +1,6 @@ import { VoiceStateUpdateSchema } from "../schema/VoiceStateUpdate.ts"; import { CLOSECODES, Payload } from "../util/Constants"; +import { Send } from "../util/Send"; import WebSocket from "../util/WebSocket"; import { check } from "./instanceOf"; @@ -8,6 +9,18 @@ import { check } from "./instanceOf"; // TODO: save voice servers in database and retrieve them // Notice: Bot users respect the voice channel's user limit, if set. When the voice channel is full, you will not receive the Voice State Update or Voice Server Update events in response to your own Voice State Update. Having MANAGE_CHANNELS permission bypasses this limit and allows you to join regardless of the channel being full or not. -export function onVoiceStateUpdate(this: WebSocket, data: Payload) { +export async function onVoiceStateUpdate(this: WebSocket, data: Payload) { check.call(this, VoiceStateUpdateSchema, data.d); + const body = data.d as VoiceStateUpdateSchema; + + await Send(this, { + op: 0, + s: this.sequence++, + t: "VOICE_SERVER_UPDATE", + d: { + token: ``, + guild_id: body.guild_id, + endpoint: `localhost:3004`, + }, + }); } diff --git a/src/start.ts b/src/start.ts
index 2fe360e2..22da628f 100644 --- a/src/start.ts +++ b/src/start.ts
@@ -5,5 +5,10 @@ import { Server } from "./Server"; import { config } from "dotenv"; config(); -const server = new Server(); +var port = Number(process.env.PORT); +if (isNaN(port)) port = 3002; + +const server = new Server({ + port, +}); server.listen();