47 lines
1.1 KiB
TypeScript
47 lines
1.1 KiB
TypeScript
|
import express from "express";
|
||
|
import { readFile } from "fs/promises";
|
||
|
import http from "http";
|
||
|
import { Server } from "socket.io";
|
||
|
import { SocketServer } from "./api_server";
|
||
|
import yargs from "yargs";
|
||
|
import { hideBin } from "yargs/helpers";
|
||
|
|
||
|
let args = yargs(hideBin(process.argv))
|
||
|
.option("debug", {
|
||
|
type: "boolean",
|
||
|
})
|
||
|
.option("port", {
|
||
|
type: "number",
|
||
|
default: 3000,
|
||
|
})
|
||
|
.parse();
|
||
|
|
||
|
const app = express();
|
||
|
const server = http.createServer(app);
|
||
|
const io = new Server(server, {
|
||
|
cors: {
|
||
|
methods: "GET,HEAD,PUT,OPTIONS,POST,DELETE",
|
||
|
preflightContinue: true,
|
||
|
},
|
||
|
});
|
||
|
|
||
|
const port = args.port;
|
||
|
const distDir = `${__dirname}/../webapp`;
|
||
|
|
||
|
app.use("/", express.static(distDir));
|
||
|
let socketServer = new SocketServer(args._[0] as string, io);
|
||
|
socketServer.init();
|
||
|
|
||
|
// Fallback, serve index.html
|
||
|
let cachedIndex: string | undefined = undefined;
|
||
|
app.get("/*", async (req, res) => {
|
||
|
if (!cachedIndex) {
|
||
|
cachedIndex = await readFile(`${distDir}/index.html`, "utf8");
|
||
|
}
|
||
|
res.status(200).header("Content-Type", "text/html").send(cachedIndex);
|
||
|
});
|
||
|
|
||
|
server.listen(port, () => {
|
||
|
console.log(`Server listening on port ${port}`);
|
||
|
});
|