Server.ts 1.23 KB
import express from "express";
import socketIo, { Server as IoServer } from "socket.io";
import { createServer } from "https";
import { RoomManager } from "./room/RoomManager";
import { Connection } from "./connection/Connection";
import { SocketIoWrapper } from "./connection/SocketWrapper";
import { readFileSync } from "fs";

export class Server {
  public readonly port: number;
  private readonly io: IoServer;

  constructor(port: number) {
    this.port = port;

    const app = express();
    const server = createServer(
      {
        cert: readFileSync(
          "/etc/letsencrypt/live/2020105578.oss2021.tk/cert.pem"
        ),
        key: readFileSync(
          "/etc/letsencrypt/live/2020105578.oss2021.tk/privkey.pem"
        ),
        ca: readFileSync(
          "/etc/letsencrypt/live/2020105578.oss2021.tk/fullchain.pem"
        ),
      },
      app
    );
    this.io = new socketIo.Server(server, {
      cors: {
        origin: "*",
      },
    });

    const roomManager = new RoomManager();

    this.io.on("connection", (socket) => {
      new Connection(new SocketIoWrapper(socket), roomManager);
    });

    server.listen(port, () => console.log(`Listening on ${port}`));
  }

  public close(): void {
    this.io.close();
  }
}