{"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":[]}