UNPKG

@litert/televoke

Version:
94 lines 3.05 kB
"use strict"; /** * Copyright 2025 Angus.Fenying <fenying@litert.org> * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.createMainThreadGateway = createMainThreadGateway; exports.createWorkerThreadGateway = createWorkerThreadGateway; const NodeWorker = require("node:worker_threads"); const cWT = require("./WorkerThread.Constants"); const node_events_1 = require("node:events"); const WorkerThread_Transporter_1 = require("./WorkerThread.Transporter"); const eWT = require("./WorkerThread.Errors"); const VOID_OK_PROMISE = Promise.resolve(); class MainThreadGateway extends node_events_1.EventEmitter { constructor(_server) { super(); this._server = _server; } get running() { return true; } start() { return VOID_OK_PROMISE; } stop() { return VOID_OK_PROMISE; } registerWorker(worker) { if (worker?.threadId === -1) { throw new eWT.E_WORKER_THREAD_OFFLINE(); } this._server.registerChannel(new WorkerThread_Transporter_1.MainThreadTransporter(cWT.MAIN_THREAD_PROTOCOL_NAME, worker)); } } class WorkerThreadGateway extends node_events_1.EventEmitter { constructor(_server) { super(); this._server = _server; this._transporter = null; } get running() { return !!this._transporter; } start() { if (this._transporter) { return VOID_OK_PROMISE; } this._server.registerChannel(this._transporter = new WorkerThread_Transporter_1.WorkerThreadTransporter(cWT.WORKER_THREAD_PROTOCOL_NAME)); return VOID_OK_PROMISE; } stop() { this._transporter?.end(); this._transporter = null; return VOID_OK_PROMISE; } } /** * Create a gateway that runs in the main thread. * * @param server The server instance. * @experimental */ function createMainThreadGateway(server) { if (!NodeWorker.isMainThread) { throw new eWT.E_MAIN_THREAD_ONLY(); } return new MainThreadGateway(server); } let workerThreadGateway = null; /** * Create a gateway that runs in the worker thread. * * @param server The server instance. * @experimental */ function createWorkerThreadGateway(server) { if (NodeWorker.isMainThread) { throw new eWT.E_WORKER_THREAD_ONLY(); } return workerThreadGateway ?? (workerThreadGateway = new WorkerThreadGateway(server)); } //# sourceMappingURL=WorkerThread.Server.js.map