116 行
3.3 KiB
Plaintext
116 行
3.3 KiB
Plaintext
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;
|
|
}
|
|
}
|
|
}
|