Add a service socket to enable out of band access to the process commandline
This commit is contained in:
parent
aaa21aad05
commit
9559035118
5 changed files with 149 additions and 0 deletions
|
|
@ -116,6 +116,10 @@ var defaults = {
|
|||
},
|
||||
"channel-storage": {
|
||||
type: "file"
|
||||
},
|
||||
"service-socket": {
|
||||
enabled: false,
|
||||
socket: "service.sock"
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
53
src/servsock.js
Normal file
53
src/servsock.js
Normal 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();
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue