bdmgrdts/instance/daemon.ts

50 lines
1.3 KiB
TypeScript
Executable file

#!/bin/env -S deno run -A --unstable
import { daemon_listen, Runner, start_runner } from "./src/lib.ts";
import { new_container_config } from "./src/lib/config.ts";
import { socket_path } from "./src/lib/paths.ts";
await main();
async function main() {
const server = daemon_listen(socket_path());
const enabled = new Map<string, Runner>();
async function finish() {
server.server.close();
await Deno.remove(socket_path());
for (const runner of enabled.values()) await runner.stop();
Deno.exit(0);
}
Deno.addSignalListener("SIGINT", finish);
console.log("listening to", socket_path());
for await (const { cmd, respond } of server) {
console.log("received", { cmd });
if (cmd.kind === "status") {
await respond(JSON.stringify(Array.from(enabled.keys())));
continue;
}
if (cmd.kind === "enable") {
const config = new_container_config(cmd.name); // TODO
const runner = start_runner(config);
enabled.set(cmd.name, runner);
await respond("enabled");
continue;
}
if (cmd.kind === "disable") {
await enabled.get(cmd.name)?.stop();
enabled.delete(cmd.name);
await respond("disabled");
continue;
}
if (cmd.kind === "stop") {
await respond(JSON.stringify("stopping, ++"));
await finish();
}
await respond("unknown");
}
}