import "missing-native-js-functions"; import dotenv from "dotenv"; 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; export class Server { public ws: WebSocketServer; constructor() { this.ws = new WebSocketServer({ port, maxPayload: 4096, // perMessageDeflate: { // zlibDeflateOptions: { // chunkSize: 65536, // }, // }, }); this.ws.on("connection", Connection); } async setupSchema() { // TODO: adjust expireAfterSeconds -> lower await Promise.all([db.collection("events").createIndex({ created_at: 1 }, { expireAfterSeconds: 60 })]); } async listen(): Promise { // @ts-ignore await (db as Promise); await this.setupSchema(); await Config.init(); console.log("[DB] connected"); console.log(`[Gateway] online on 0.0.0.0:${port}`); } }