UNPKG

@cocalc/project

Version:
56 lines 2.18 kB
"use strict"; /* * This file is part of CoCalc: Copyright © 2020 Sagemath, Inc. * License: AGPLv3 s.t. "Commons Clause" – see LICENSE.md for details */ Object.defineProperty(exports, "__esModule", { value: true }); exports.project_info_ws = exports.get_ProjectInfoServer = void 0; const server_1 = require("./server"); const utils_1 = require("./utils"); // singleton, we instantiate it when we need it let _info = undefined; function get_ProjectInfoServer() { if (_info != null) return _info; _info = new server_1.ProjectInfoServer(); return _info; } exports.get_ProjectInfoServer = get_ProjectInfoServer; async function project_info_ws(primus, logger) { const L = (...msg) => logger.debug("project_info:", ...msg); const name = `project_info`; const channel = primus.channel(name); function deregister(spark) { L(`deregistering ${spark.id}`); } channel.on("connection", function (spark) { // Now handle the connection L(`channel: new connection from ${spark.address.ip} -- ${spark.id}`); function close(type) { L(`event ${type}: deregistering`); deregister(spark); } spark.on("close", () => close("close")); spark.on("end", () => close("end")); spark.on("data", function (data) { // we assume only ProjectInfoCmds should come in, but better check what this is if (typeof data === "object") { switch (data.cmd) { case "signal": L(`Signal ${data.signal} from ${spark.id} for pids: ${data.pids}`); (0, utils_1.exec)(`kill -s ${data.signal ?? 15} ${data.pids.join(" ")}`); break; default: throw Error("WARNING: unknown command -- " + data.cmd); } } }); }); channel.on("disconnection", function (spark) { L(`channel: disconnection from ${spark.address.ip} -- ${spark.id}`); deregister(spark); }); return name; } exports.project_info_ws = project_info_ws; //# sourceMappingURL=project-info.js.map