UNPKG

ram64

Version:

Multi-threaded 64bit memory cache database inspired by redis-like features

54 lines (53 loc) 2.13 kB
"use strict"; 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