ram64
Version:
Multi-threaded 64bit memory cache database inspired by redis-like features
54 lines (53 loc) • 2.13 kB
JavaScript
;
exports.processServerRequest = processServerRequest;
var _workerThreads = require("worker_threads");
var _processResponse = require("./process-response");
var _commands = require("../commands");
var _processRequest = require("./process-request");
function processServerRequest(instance, worker1, msg1) {
const { command , requestId , args } = msg1;
switch(command){
case 'connect':
if (args?.connectKey !== instance.connectKey) {
return void worker1.postMessage({
ram64: true,
requestId,
error: 'Valid `connectKey` is required'
});
}
const workerPorts = instance.workerPorts.map((worker)=>{
const { port1 , port2 } = new _workerThreads.MessageChannel(); // create bidirectional link between worker and calling thread
// no requestId, blind fire-and-forget
const req = {
workerOrPort: worker,
commandIndex: _commands.commandsDict.connect.index,
args: {
port: port1
}
};
port1.on('message', (msg)=>(0, _processResponse).processResponse(msg));
port1.unref();
(0, _processRequest).processRequest(instance, req, [
port1
]);
// TODO: handle 'close' event (may not be necessary since we don't track reference)
return port2;
});
const response = {
ram64: true,
requestId,
value: {
ports: workerPorts,
shardCount: instance.shardCount
}
};
worker1.postMessage(response, [
...workerPorts
]); // transfer ports to worker
break;
default:
Promise.reject(new Error(`Server command '${command}' not implemented`));
break;
}
}
//# sourceMappingURL=process-server-request.js.map