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;
}
}
}