9433cfb9创建于 2025年12月31日历史提交
import { CreateWorkers, DestroyWorker, OnWorkerError,
OnWorkerMessage, SendWorkerMessage,
UTSWorkerAddListenerOptions , UTSWorkerAddListenerOptionsSuccess, UTSWorkerSendWorkerMessageOptions, UTSWorkerErrorOptions, UTSWorkerErrorCallbackSuccess } from './interface.uts';

export * from './interface.uts';

export const createWorkers : CreateWorkers = function () : void {
	UTSWorkerImpl.shared.create();
}
export const sendWorkerMessage : SendWorkerMessage = function (options : UTSWorkerSendWorkerMessageOptions) : void {
	UTSWorkerImpl.shared.sendMessage(options);
}

export const onWorkerMessage : OnWorkerMessage  = function (options : UTSWorkerAddListenerOptions) : void {
	UTSWorkerImpl.shared.onMessage(options);
}

export const destroyWorker : DestroyWorker = function () : void {
	UTSWorkerImpl.shared.destroy();
}

export const onWorkerError : OnWorkerError = function (options: UTSWorkerErrorOptions) : void {
	UTSWorkerImpl.shared.onError(options);
}

export class UTSWorkerImpl{
  static shared : UTSWorkerImpl = new UTSWorkerImpl()
	private workerImp : Worker | null = null;
	private options : UTSWorkerAddListenerOptions | null = null;
	private errorOptions : UTSWorkerErrorOptions | 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/helloWorkerTask.uts');
		this.workerImp = worker;
	}


	sendMessage(options : UTSWorkerSendWorkerMessageOptions){
		if (this.workerImp == null) {
			console.error('Worker未创建,无法发送消息');
			return;
		}

		// 获取消息信息并添加日志
		const msgData = options.data;
		const needReply = options.needReply;

		console.log(`[UTS Plugin] 向Worker发送消息: ${msgData} (需要回复: ${needReply})`);

		// 构造要发送给Worker的消息对象
		const messageToWorker = {
			data: msgData,
			needReply: needReply
		};

		this.workerImp!.postMessage(messageToWorker,null);
	}

	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);
			}
		})
	}
	onError(options: UTSWorkerErrorOptions){
		if (this.workerImp == null) {
			console.error('Worker未创建,无法监听错误');
			return;
		}

		this.errorOptions = options;
		this.workerImp!.onError((error) => {
			console.error('[UTS Plugin] Worker发生错误:', error);

			if (this.errorOptions != null && this.errorOptions.success != null) {
				// const errorInfo: UTSWorkerErrorCallbackSuccess = {
				// 	message: error.message
				// };
        const errorInfo: UTSWorkerErrorCallbackSuccess = {
        	message: "worker error"
        };
				this.errorOptions.success(errorInfo);
			}
		})
	}
	destroy(){

		if (this.workerImp != null) {
			console.log('[UTS Plugin] 销毁Worker');
			this.workerImp.terminate();
			this.workerImp = null;
			this.options = null;
			this.errorOptions = null;
		}
	}
}