diff options
Diffstat (limited to 'MistyCore/socket.js')
-rw-r--r-- | MistyCore/socket.js | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/MistyCore/socket.js b/MistyCore/socket.js new file mode 100644 index 0000000..0db4f5b --- /dev/null +++ b/MistyCore/socket.js @@ -0,0 +1,68 @@ +log("MistyCore-Socket", "Installing socket..."); +const net = require('net'); +const fs = require('fs'); +const unixSocketServer = net.createServer(); + +if (fs.existsSync(systemRoot + "/../Volumes/VM/MistyCore-Socket")) fs.unlinkSync(systemRoot + "/../Volumes/VM/MistyCore-Socket"); + +unixSocketServer.listen(systemRoot + "/../Volumes/VM/MistyCore-Socket", () => { + log("MistyCore-Socket", "Socket ready"); +}); + +unixSocketServer.on('connection', (s) => { + s.on('data', function (msg) { + try { + let data = JSON.parse(msg.toString()); + + if (!data.action || !data.payload) { + log("MistyCore-Socket", "Received data but it is not correctly formatted:\n" + e.stack); + } else { + switch (data.action) { + case "LOG": + log(data.payload.service ?? "<unknown>", data.payload.text ?? "<unknown>"); + break; + + case "SHUTDOWN": + require('./power')(false); + break; + + case "REBOOT": + require('./power')(true); + break; + + case "SERVICE": + switch (data.payload.option) { + case "restart": + services.restart(data.payload.service); + break; + + case "stop": + services.stop(data.payload.service); + break; + + case "forcestop": + services.stop(data.payload.service, true); + break; + + case "start": + services.start(data.payload.service, true); + break; + + default: + log("MistyCore-Socket", "Received unrecognized launch daemon command: " + data.payload.option); + break; + } + break; + + default: + log("MistyCore-Socket", "Received data but the action is not recognized:\n" + data.action); + break; + } + } + } catch (e) { + log("MistyCore-Socket", "Received data but unable to decode it:\n" + e.stack); + } + }); + + s.end(); +});
\ No newline at end of file |