UNPKG

silk-gui

Version:

GUI for developers and Node OS

116 lines (107 loc) 2.86 kB
/* Communication between - method calls from the client and app forks. - Silk api calls from forks and silk methods. */ var serverAPI = require('./server_api.js'), log = require('../console.js').log; var methods = { wflag: false, windows: [], requests: {}, user_reqs: {}, users: {}, responders: {}, fork_resp: {}, forks: {} }; methods.add = function (m, fork) { log.debug('adding method ' + m.name); this.responders[m.name] = fork; this.fork_resp[fork.pid].push(m.name); }; methods.send = function (message) { if (!this.requests[message.id]) { log.debug("user removed or no request"); return; } this.requests[message.id].write(JSON.stringify(message)); }; methods.removeFork = function (fork, code, signal) { console.log(code + " " + signal); // delete methods from this fork for (var i in this.responders) { if (this.responders[i].pid === fork.pid) { console.log(i); delete this.responders[i]; } } delete this.fork_resp[fork.pid]; delete this.forks[fork.pid]; }; methods.addFork = function (fork) { this.fork_resp[fork.pid] = []; this.forks[fork.pid] = fork; fork.on("message", function (message) { switch (message.cmd) { case "send": methods.send(message.message); break; case "add": methods.add(message, fork); break; case "server api": serverAPI.call(message, fork); break; } }.bind(this)); fork.on("error", function (e) { console.log(e); }); fork.on("close", function (code, signal) { methods.removeFork(fork, code, signal); }); }; methods.call = function (ws, message) { try { message = JSON.parse(message); } catch (e) { console.log("ERROR"); console.log("err:" + e); console.log("mess: " + message); console.log("typeof: " + typeof message); } if (!(message.name in this.responders)) { console.log("method not found", message); //console.log(JSON.stringify(message)); return ws.write(JSON.stringify({ id: message.id, ws: ws.id, error: "method " + message.name + " does not exist" })); } log.debug('ws id is :' + ws.id); if (!this.users[ws.id]) { this.users[ws.id] = ws; ws.on("close", function () { delete this.users[ws.id]; for (var i in this.user_reqs[ws.id]) { delete this.requests[this.user_reqs[ws.id][i]]; } delete this.user_reqs[ws.id]; for (var fork in this.forks) { if (fork.connected) { this.forks[fork].send({ cmd: "disconnect", ws: ws.id }); } } }.bind(this)); this.user_reqs[ws.id] = []; } message.ws = ws.id; this.user_reqs[ws.id].push(message.id); this.responders[message.name].send(message); this.requests[message.id] = ws; }; module.exports = methods;