Add a service socket to enable out of band access to the process commandline

This commit is contained in:
Xaekai 2016-07-15 22:06:27 -07:00
parent aaa21aad05
commit 9559035118
5 changed files with 149 additions and 0 deletions

View file

@ -116,6 +116,10 @@ var defaults = {
},
"channel-storage": {
type: "file"
},
"service-socket": {
enabled: false,
socket: "service.sock"
}
};

53
src/servsock.js Normal file
View file

@ -0,0 +1,53 @@
var fs = require('fs');
var net = require('net');
export default class ServiceSocket {
constructor() {
this.connections = {};
}
init(handler, socket){
this.handler = handler;
this.socket = socket;
fs.stat(this.socket, (err, stats) => {
if (err) {
return this.openServiceSocket();
}
fs.unlink(this.socket, (err) => {
if(err){
console.error(err); process.exit(0);
}
return this.openServiceSocket();
});
});
}
openServiceSocket(){
this.server = net.createServer((stream) => {
let id = Date.now();
this.connections[id] = stream;
stream.on('end', () => {
delete this.connections[id];
});
stream.on('data', (msg) => {
this.handler(msg.toString());
});
}).listen(this.socket);
process.on('exit', this.closeServiceSocket.bind(this));
}
closeServiceSocket() {
if(Object.keys(this.connections).length){
let clients = Object.keys(this.connections);
while(clients.length){
let client = clients.pop();
this.connections[client].write('__disconnect');
this.connections[client].end();
}
}
this.server.close();
}
}