import { UTSWorkerAddListenerOptions, UTSWorkerAddListenerOptionsSuccess, UTSWorkerSendWorkerMessageOptions } from './interface.uts'; // #ifdef APP-HARMONY import { SendableObject } from './sendable.ets'; // #endif export * from './interface.uts'; type WorkerPostMessageOptions = { harmonySendable ?: boolean transfer ?: any[] } export class UTSSendableWorkerImpl { private workerImp : Worker | null = null; private options : UTSWorkerAddListenerOptions | null = null; create() { if (this.workerImp != null) { console.warn('[UTS Plugin] Worker已存在,先销毁旧的Worker'); this.destroy(); } console.log('[UTS Plugin] 创建Worker'); const worker = uni.createWorker('workers/sendableTransferWorker.uts'); this.workerImp = worker; } sendMessage(options : UTSWorkerSendWorkerMessageOptions) { if (this.workerImp == null) { console.error('Worker未创建,无法发送消息'); return; } let message = options.message; const harmonySendable = options.harmonySendable; const transfer = options.transfer; console.log(`[UTS Plugin] 向Worker发送消息: ${message}`); // #ifdef APP-HARMONY if (harmonySendable) { message = new SendableObject(); } // #endif this.workerImp!.postMessage(message, { harmonySendable, transfer } as WorkerPostMessageOptions); } onMessage(options : UTSWorkerAddListenerOptions) { if (this.workerImp == null) { console.error('Worker未创建,无法监听消息'); return; } this.options = options; this.workerImp!.onMessage((result) => { // 处理Worker返回的消息 console.log(`[UTS Plugin] 收到Worker消息:`, result); if (this.options != null && this.options.success != null) { let success : UTSWorkerAddListenerOptionsSuccess = { result: result as UTSJSONObject } this.options.success(success); } }) } destroy() { if (this.workerImp != null) { console.log('[UTS Plugin] 销毁Worker'); this.workerImp.terminate(); this.workerImp = null; this.options = null; } } }