Move readline to commands and add something like jinja

This commit is contained in:
Hri7566 2024-01-26 03:56:15 -05:00
parent 541fd4930b
commit 09a6eb5d0d
10 changed files with 81 additions and 41 deletions

BIN
bun.lockb

Binary file not shown.

View File

@ -15,6 +15,7 @@
"events": "^3.3.0", "events": "^3.3.0",
"fancy-text-converter": "^1.0.9", "fancy-text-converter": "^1.0.9",
"keccak": "^2.1.0", "keccak": "^2.1.0",
"nunjucks": "^3.2.4",
"unique-names-generator": "^4.7.1", "unique-names-generator": "^4.7.1",
"yaml": "^2.3.2", "yaml": "^2.3.2",
"zod": "^3.22.2" "zod": "^3.22.2"
@ -22,6 +23,7 @@
"devDependencies": { "devDependencies": {
"@types/bun": "latest", "@types/bun": "latest",
"@types/node": "^20.5.9", "@types/node": "^20.5.9",
"@types/nunjucks": "^3.2.6",
"@typescript-eslint/eslint-plugin": "^6.19.1", "@typescript-eslint/eslint-plugin": "^6.19.1",
"@typescript-eslint/parser": "^6.19.1", "@typescript-eslint/parser": "^6.19.1",
"eslint": "^8.56.0", "eslint": "^8.56.0",

2
public

@ -1 +1 @@
Subproject commit af660e9834493b178876dd959d5e3fc97e96bbc2 Subproject commit 0f21e390667589f7acfef4d82a8f270a830822ee

3
src/util/motd.ts Normal file
View File

@ -0,0 +1,3 @@
export function getMOTD() {
return "This site is loud!";
}

View File

@ -1,17 +1,6 @@
import readline from "readline"; import logger from "./logger";
import { Logger } from "./Logger";
export const rl = readline.createInterface({ export class Command {
input: process.stdin,
output: process.stdout
});
const logger = new Logger("CLI");
rl.setPrompt("mpps> ");
rl.prompt();
class Command {
public static commands: Command[] = []; public static commands: Command[] = [];
public static async handleCommand(line: string) { public static async handleCommand(line: string) {
const args = line.split(" "); const args = line.split(" ");
@ -57,25 +46,4 @@ class Command {
) {} ) {}
} }
Command.addCommand( export default Command;
new Command(["memory", "mem"], "mem", msg => {
const mem = process.memoryUsage();
return `Memory: ${(mem.heapUsed / 1000 / 1000).toFixed(2)} MB used / ${(
mem.heapTotal /
1000 /
1000
).toFixed(2)} MB total`;
})
);
rl.on("line", async line => {
const out = await Command.handleCommand(line);
logger.info(out);
rl.prompt();
});
rl.on("SIGINT", () => {
process.exit();
});
(globalThis as unknown as any).rl = rl;

View File

@ -0,0 +1,27 @@
import Command from "./Command";
Command.addCommand(
new Command(["help", "h", "commands", "cmds"], "help", msg => {
return (
"Commands: " +
Command.commands.map(cmd => cmd.aliases[0]).join(" | ")
);
})
);
Command.addCommand(
new Command(["memory", "mem"], "mem", msg => {
const mem = process.memoryUsage();
return `Memory: ${(mem.heapUsed / 1000 / 1000).toFixed(2)} MB used / ${(
mem.heapTotal /
1000 /
1000
).toFixed(2)} MB total`;
})
);
Command.addCommand(
new Command(["stop", "exit"], "stop", msg => {
process.exit();
})
);

View File

@ -0,0 +1,24 @@
import readline from "readline";
import logger from "./logger";
import Command from "./Command";
import "./commands";
export const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.setPrompt("mpps> ");
rl.prompt();
rl.on("line", async line => {
const out = await Command.handleCommand(line);
logger.info(out);
rl.prompt();
});
rl.on("SIGINT", () => {
process.exit();
});
(globalThis as unknown as any).rl = rl;

View File

@ -0,0 +1,4 @@
import { Logger } from "../Logger";
export const logger = new Logger("CLI");
export default logger;

View File

@ -3,13 +3,25 @@ import { createSocketID, createUserID } from "../util/id";
import fs from "fs"; import fs from "fs";
import path from "path"; import path from "path";
import { handleMessage } from "./message"; import { handleMessage } from "./message";
import { decoder } from "../util/helpers";
import { Socket, socketsBySocketID } from "./Socket"; import { Socket, socketsBySocketID } from "./Socket";
import { serve, file } from "bun";
import env from "../util/env"; import env from "../util/env";
import { getMOTD } from "../util/motd";
import nunjucks from "nunjucks";
const logger = new Logger("WebSocket Server"); const logger = new Logger("WebSocket Server");
async function getIndex() {
const index = Bun.file("./public/index.html");
const rendered = nunjucks.renderString(await index.text(), {
motd: getMOTD()
});
const response = new Response(rendered);
response.headers.set("Content-Type", "text/html");
return response;
}
export const app = Bun.serve({ export const app = Bun.serve({
port: env.PORT, port: env.PORT,
hostname: "0.0.0.0", hostname: "0.0.0.0",
@ -30,13 +42,13 @@ export const app = Bun.serve({
if (data) { if (data) {
return new Response(data); return new Response(data);
} else { } else {
return new Response(Bun.file("./public/index.html")); return getIndex();
} }
} else { } else {
return new Response(Bun.file("./public/index.html")); return getIndex();
} }
} catch (err) { } catch (err) {
return new Response(Bun.file("./public/index.html")); return getIndex();
} }
} }
}, },

View File