From 2cb037c6693889ad2d8191219badd04784fd3ac0 Mon Sep 17 00:00:00 2001 From: "Austin.Duan" Date: Tue, 26 Jul 2022 14:20:49 +0800 Subject: [PATCH] =?UTF-8?q?KERNEL-12095=20WorkerHelper=E6=94=B9=E4=B8=8B?= =?UTF-8?q?=E8=AE=BE=E8=AE=A1=EF=BC=8C=E6=94=AF=E6=8C=81=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=E3=80=81=E5=88=9B=E5=BB=BA=E3=80=81=E7=BB=88=E6=AD=A2worker?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bin/cli/worker/cli.worker.js | 2 +- bin/cli/worker/template/main_thread.helper.t | 71 +++++++++++++++++++ .../template/main_thread/main_thread.helper.t | 26 ------- 3 files changed, 72 insertions(+), 27 deletions(-) create mode 100644 bin/cli/worker/template/main_thread.helper.t delete mode 100644 bin/cli/worker/template/main_thread/main_thread.helper.t diff --git a/bin/cli/worker/cli.worker.js b/bin/cli/worker/cli.worker.js index 02a7c803a..555c99cf0 100644 --- a/bin/cli/worker/cli.worker.js +++ b/bin/cli/worker/cli.worker.js @@ -45,7 +45,6 @@ module.exports = { 'action.worker_ability_test.ts': path.resolve(__dirname, './template/main_thread/action/action.worker_ability_test.t'), }, [`${name}_main_thread.ts`]: path.resolve(__dirname, './template/main_thread/main_thread.t'), - [`${name}_main_thread.helper.ts`]: path.resolve(__dirname, './template/main_thread/main_thread.helper.t'), }, utils: { 'action_type.ts': path.resolve(__dirname, './template/utils/action_type.t'), @@ -57,6 +56,7 @@ module.exports = { }, [`${name}_worker_thread.ts`]: path.resolve(__dirname, './template/worker_thread/worker_thread.t'), }, + [`${name}_main_thread.helper.ts`]: path.resolve(__dirname, './template/main_thread.helper.t'), }, }; diff --git a/bin/cli/worker/template/main_thread.helper.t b/bin/cli/worker/template/main_thread.helper.t new file mode 100644 index 000000000..996cd9007 --- /dev/null +++ b/bin/cli/worker/template/main_thread.helper.t @@ -0,0 +1,71 @@ +import { ${WorkerName}MainThreadWorker } from './main_thread/${workerName}_main_thread'; +// 不需要一起打包的话则不需要引入这行 +import { workerUrl } from 'fui-worker!./worker_thread/${workerName}_worker_thread'; + +export class ${WorkerName}WorkerHelper { + public workers: WorkerItems[] = []; + + /** + * 支持创建多个worker + * @param key worker key + */ + public createMainThreadWorker(key: string = '') { + const findItem = this.workers.find(item => item.key === key); + + if (findItem) return findItem.worker; + + const newWorker = BI.Workers.createWorker(${WorkerName}MainThreadWorker, { + workerUrl: this.urlFormatter(workerUrl), + workerName: BI.UUID(), + }); + + this.workers.push({ + key, + worker: newWorker, + }); + + return newWorker; + } + + /** + * 格式化worker url,比如补充一些环境信息到参数里 + * @param url worker url + */ + private urlFormatter(url: string) { + return url; + } + + /** + * 终止worker,不传key就全部终止 + * @param key key + */ + public terminate(key?: string) { + if (!key) { + this.workers.forEach(item => { + item.worker.terminate(); + }); + + this.workers = []; + + return; + } + this.workers.find(item => item.key === key)?.worker.terminate(); + + const findIndex = this.workers.findIndex(item => item.key === key); + + findIndex !== -1 + && this.workers.splice(findIndex, 1); + } +} + +export const ${workerName}WorkerHelper = new ${WorkerName}WorkerHelper(); + +interface WorkerItems { + key: string; + worker: ${WorkerName}MainThreadWorker; +} + +// 使用示例 +${workerName}WorkerHelper.createMainThreadWorker() + .testCommunication() + .then(res => console.log(res)); diff --git a/bin/cli/worker/template/main_thread/main_thread.helper.t b/bin/cli/worker/template/main_thread/main_thread.helper.t deleted file mode 100644 index defe01502..000000000 --- a/bin/cli/worker/template/main_thread/main_thread.helper.t +++ /dev/null @@ -1,26 +0,0 @@ -import { ${WorkerName}MainThreadWorker } from './new_main_thread'; -// 不需要一起打包的话则不需要引入这行 -import { workerUrl } from 'fui-worker!../worker_thread/new_worker_thread'; - -// MainThread的创建在helper层处理 -export class ${WorkerName}MainThreadWorkerHelper { - public createMainTreadWorker() { - return BI.Workers.createWorker(${WorkerName}MainThreadWorker, { - workerUrl: this.urlFormatter(workerUrl), - workerName: BI.UUID(), - }); - } - - private urlFormatter(v: string) { - return v; - } -} - -export const mainThreadWorkerHelper = new ${WorkerName}MainThreadWorkerHelper(); - -// 调用示例 -mainThreadWorkerHelper.createMainTreadWorker() - .testCommunication() - .then(res => { - console.log(res) - }) \ No newline at end of file