@cocalc/project
Version:
CoCalc: project daemon
56 lines • 2.18 kB
JavaScript
;
/*
* 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