diff options
Diffstat (limited to 'gateway/src/Server.ts')
-rw-r--r-- | gateway/src/Server.ts | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/gateway/src/Server.ts b/gateway/src/Server.ts new file mode 100644 index 00000000..d4b3271c --- /dev/null +++ b/gateway/src/Server.ts @@ -0,0 +1,55 @@ +import "missing-native-js-functions"; +import dotenv from "dotenv"; +dotenv.config(); +import { Config, db, RabbitMQ } from "@fosscord/server-util"; +import { Server as WebSocketServer } from "ws"; +import { Connection } from "./events/Connection"; +import http from "http"; + +export class Server { + public ws: WebSocketServer; + public port: number; + public server: http.Server; + public production: boolean; + + constructor({ port, server, production }: { port: number; server?: http.Server; production?: boolean }) { + this.port = port; + this.production = production || false; + + if (server) this.server = server; + else + this.server = http.createServer(function (req, res) { + res.writeHead(200).end("Online"); + }); + + this.ws = new WebSocketServer({ + maxPayload: 4096, + server: this.server, + }); + this.ws.on("connection", Connection); + this.ws.on("error", console.error); + } + + async setupSchema() { + // TODO: adjust expireAfterSeconds -> lower + await Promise.all([db.collection("events").createIndex({ created_at: 1 }, { expireAfterSeconds: 60 })]); + } + + async start(): Promise<void> { + // @ts-ignore + await (db as Promise<Connection>); + await this.setupSchema(); + await Config.init(); + await RabbitMQ.init(); + console.log("[Database] connected"); + if (!this.server.listening) { + this.server.listen(this.port); + console.log(`[Gateway] online on 0.0.0.0:${this.port}`); + } + } + + async stop() { + await db.close(); + this.server.close(); + } +} |