@awesome-ecs/workers
Version:
The Workers package for Awesome ECS. Provides basic implementation for the Worker communication using ECS.
1 lines • 2.67 kB
Source Map (JSON)
{"version":3,"sources":["../../src/runtime/index.ts","../../src/runtime/worker-runtime.ts"],"sourcesContent":["export * from './worker-runtime';\n","import { IEntityRepository } from '@awesome-ecs/abstract/entities';\nimport { ISystemsRuntime } from '@awesome-ecs/abstract/systems';\nimport { ILogger } from '@awesome-ecs/abstract/utils';\nimport { PipelineResult } from '@awesome-ecs/abstract/pipelines';\nimport { WorkerStatus } from '../components/worker-instance';\nimport { IWorkerMessageQueue } from '../abstract/worker-queue';\nimport { WorkerThreadEntity } from '../entities/worker-thread';\nimport { WorkerEntityType } from '../abstract/types/entity-type';\n\n// @injectable\nexport class WorkerSystemRuntime implements ISystemsRuntime {\n constructor(\n private workerMessageQueue: IWorkerMessageQueue,\n private entityRepository: IEntityRepository,\n private logger: ILogger\n ) {}\n\n runTick(): PipelineResult {\n const message = this.workerMessageQueue.peek();\n\n if (!message) {\n return;\n }\n\n const workers = this.entityRepository.getAll<WorkerThreadEntity>(WorkerEntityType.workerThread);\n\n if (!workers) {\n this.logger.warn('No WorkerThreadEntity was registered for type: ', message.workerType);\n return;\n }\n\n let availableWorker: WorkerThreadEntity;\n\n for (const worker of workers) {\n if (worker.instance.status === WorkerStatus.available) {\n availableWorker = worker;\n break;\n }\n }\n\n if (!availableWorker) {\n this.logger.debug(\n 'No available worker found. Skipping current tick.',\n message.workerType,\n message.messageUid\n );\n return;\n }\n\n this.logger.debug('Sending message to Worker', availableWorker.identity.model.uid, message);\n\n availableWorker.instance.worker.postMessage(message);\n availableWorker.instance.status = WorkerStatus.busy;\n\n this.workerMessageQueue.dequeue();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACUO,IAAM,sBAAN,MAAqD;AAAA,EAC1D,YACU,oBACA,kBACA,QACR;AAHQ;AACA;AACA;AAAA,EACP;AAAA,EAEH,UAA0B;AACxB,UAAM,UAAU,KAAK,mBAAmB,KAAK;AAE7C,QAAI,CAAC,SAAS;AACZ;AAAA,IACF;AAEA,UAAM,UAAU,KAAK,iBAAiB,yCAAwD;AAE9F,QAAI,CAAC,SAAS;AACZ,WAAK,OAAO,KAAK,mDAAmD,QAAQ,UAAU;AACtF;AAAA,IACF;AAEA,QAAI;AAEJ,eAAW,UAAU,SAAS;AAC5B,UAAI,OAAO,SAAS,8BAAmC;AACrD,0BAAkB;AAClB;AAAA,MACF;AAAA,IACF;AAEA,QAAI,CAAC,iBAAiB;AACpB,WAAK,OAAO;AAAA,QACV;AAAA,QACA,QAAQ;AAAA,QACR,QAAQ;AAAA,MACV;AACA;AAAA,IACF;AAEA,SAAK,OAAO,MAAM,6BAA6B,gBAAgB,SAAS,MAAM,KAAK,OAAO;AAE1F,oBAAgB,SAAS,OAAO,YAAY,OAAO;AACnD,oBAAgB,SAAS;AAEzB,SAAK,mBAAmB,QAAQ;AAAA,EAClC;AACF;","names":[]}