first commit
This commit is contained in:
68
grafana/dashboards/requests/node_modules/sync-rpc/lib/worker.js
generated
vendored
Normal file
68
grafana/dashboards/requests/node_modules/sync-rpc/lib/worker.js
generated
vendored
Normal file
@@ -0,0 +1,68 @@
|
||||
'use strict';
|
||||
|
||||
const net = require('net');
|
||||
const JSON = require('./json-buffer');
|
||||
|
||||
const INIT = 1;
|
||||
const CALL = 0;
|
||||
const modules = [];
|
||||
|
||||
const NULL_PROMISE = Promise.resolve(null);
|
||||
const server = net.createServer({allowHalfOpen: true}, c => {
|
||||
let responded = false;
|
||||
function respond(data) {
|
||||
if (responded) return;
|
||||
responded = true;
|
||||
c.end(JSON.stringify(data));
|
||||
}
|
||||
|
||||
let buffer = '';
|
||||
c.on('error', function(err) {
|
||||
respond({s: false, v: {code: err.code, message: err.message}});
|
||||
});
|
||||
c.on('data', function(data) {
|
||||
buffer += data.toString('utf8');
|
||||
if (/\r\n/.test(buffer)) {
|
||||
onMessage(buffer.trim());
|
||||
}
|
||||
});
|
||||
function onMessage(str) {
|
||||
if (str === 'ping') {
|
||||
c.end('pong');
|
||||
return;
|
||||
}
|
||||
NULL_PROMISE.then(function() {
|
||||
const req = JSON.parse(str);
|
||||
if (req.t === INIT) {
|
||||
return init(req.f, req.a);
|
||||
}
|
||||
return modules[req.i](req.a);
|
||||
}).then(
|
||||
function(response) {
|
||||
respond({s: true, v: response});
|
||||
},
|
||||
function(err) {
|
||||
respond({s: false, v: {code: err.code, message: err.message}});
|
||||
}
|
||||
);
|
||||
}
|
||||
});
|
||||
|
||||
function init(filename, arg) {
|
||||
let m = require(filename);
|
||||
if (m && typeof m === 'object' && typeof m.default === 'function') {
|
||||
m = m.default;
|
||||
}
|
||||
if (typeof m !== 'function') {
|
||||
throw new Error(filename + ' did not export a function.');
|
||||
}
|
||||
return NULL_PROMISE.then(function() {
|
||||
return m(arg);
|
||||
}).then(function(fn) {
|
||||
const i = modules.length;
|
||||
modules[i] = fn;
|
||||
return i;
|
||||
});
|
||||
}
|
||||
|
||||
server.listen(+process.argv[2]);
|
||||
Reference in New Issue
Block a user