@awesome-ecs/workers
Version:
The Workers package for Awesome ECS. Provides basic implementation for the Worker communication using ECS.
68 lines (66 loc) • 2.33 kB
JavaScript
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// src/runtime/index.ts
var runtime_exports = {};
__export(runtime_exports, {
WorkerSystemRuntime: () => WorkerSystemRuntime
});
module.exports = __toCommonJS(runtime_exports);
// src/runtime/worker-runtime.ts
var WorkerSystemRuntime = class {
constructor(workerMessageQueue, entityRepository, logger) {
this.workerMessageQueue = workerMessageQueue;
this.entityRepository = entityRepository;
this.logger = logger;
}
runTick() {
const message = this.workerMessageQueue.peek();
if (!message) {
return;
}
const workers = this.entityRepository.getAll("worker-thread" /* workerThread */);
if (!workers) {
this.logger.warn("No WorkerThreadEntity was registered for type: ", message.workerType);
return;
}
let availableWorker;
for (const worker of workers) {
if (worker.instance.status === 1 /* available */) {
availableWorker = worker;
break;
}
}
if (!availableWorker) {
this.logger.debug(
"No available worker found. Skipping current tick.",
message.workerType,
message.messageUid
);
return;
}
this.logger.debug("Sending message to Worker", availableWorker.identity.model.uid, message);
availableWorker.instance.worker.postMessage(message);
availableWorker.instance.status = 2 /* busy */;
this.workerMessageQueue.dequeue();
}
};
// Annotate the CommonJS export names for ESM import in node:
0 && (module.exports = {
WorkerSystemRuntime
});
//# sourceMappingURL=index.cjs.map