diff options
author | metamuffin <metamuffin@disroot.org> | 2022-09-07 11:14:42 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2022-09-07 11:14:42 +0200 |
commit | 61950198e3bf06555f48e8f51c882a4c3cce5128 (patch) | |
tree | a7701a44804d4a2a634f3410d400545ea82d1c45 /server-legacy/server/index.ts | |
parent | 832f48f29098cc6f840ade90db3b94efa67c6833 (diff) | |
download | keks-meet-61950198e3bf06555f48e8f51c882a4c3cce5128.tar keks-meet-61950198e3bf06555f48e8f51c882a4c3cce5128.tar.bz2 keks-meet-61950198e3bf06555f48e8f51c882a4c3cce5128.tar.zst |
REFACTOR! pt.1
Diffstat (limited to 'server-legacy/server/index.ts')
-rw-r--r-- | server-legacy/server/index.ts | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/server-legacy/server/index.ts b/server-legacy/server/index.ts new file mode 100644 index 0000000..de2ba4e --- /dev/null +++ b/server-legacy/server/index.ts @@ -0,0 +1,77 @@ +import { Application, Router, RouterContext, send } from "https://deno.land/x/oak@v10.4.0/mod.ts"; +import { api } from "./room.ts"; +import { bundle } from "https://deno.land/x/emit@0.1.1/mod.ts"; + +const app = new Application() +const root = new Router() + + +root.get("/", async c => { await c.send({ path: "index.html", root: `${Deno.cwd()}/public` }) }) +root.get("/room/:id", async c => { await c.send({ path: "index.html", root: `${Deno.cwd()}/public` }) }) + +root.get("/licen(c|s)e", async c => { + c.response.body = await Deno.readTextFile("LICENCE") + c.response.headers.set("Content-Type", "text/plain") +}) + +root.get("/favicon.ico", c => { c.response.status = 204 }) + +// deno-lint-ignore no-explicit-any +function respondWithType(mimeType: string, f: () => string): (c: RouterContext<any, any, any>) => void { + return c => { + c.response.headers.set("Content-Type", mimeType) + c.response.body = f() + } +} + +let bundle_code = "" +root.get("/bundle.js", respondWithType("application/javascript", () => bundle_code)) + +root.use(api.routes()) + +function mountFilesystem(r: Router, route: string, path: string) { + r.get(route + "/(.*)", async (context) => { + console.log(context.request.url.pathname.substring(route.length)); + await send(context, context.request.url.pathname.substring(route.length), { root: Deno.cwd() + path }); + }) +} + +mountFilesystem(root, "/_style", "/public/style") +mountFilesystem(root, "/_rnnoise", "/public/rnnoise") + +app.use(root.routes()) +app.use(root.allowedMethods()) + +app.addEventListener("listen", ({ hostname, port, secure }) => { + console.log(`listening on: ${secure ? "https://" : "http://"}${hostname}:${port}`); +}); + +app.listen({ + hostname: Deno.env.get("HOSTNAME") ?? "127.0.0.1", + port: parseInt(Deno.env.get("PORT") ?? "8080") +}); + + +let refresh_needed = false +let refresh_pending = false +async function refresh() { + refresh_needed = true + if (refresh_pending) return + refresh_needed = false + refresh_pending = true + + try { + const { code } = await bundle("source/client/index.ts", { compilerOptions: { checkJs: false } }) + bundle_code = code + } catch (e) { console.error(e) } + + refresh_pending = false + if (refresh_needed) refresh() +} + +refresh() +for await (const event of Deno.watchFs("source/client")) { + if (event.kind == "modify" || event.kind == "create") { + refresh() + } +} |