Need worker port export in harmony os and better functions to call thread #18723
Labels
Env: Native
General issue on all native platforms including iOS, Android, MacOS, Windows
Feature Request
Use Case
it's too hard to call worker port in ark TS and add new statement.
Problem Description
too hard to use in cocos worker, this file will be rebuild everytime
Proposed Solution
some suggestion like, to use map to add new statement
// 消息处理器映射表
const messageHandlers = new Map();
/**
*/
type MessageHandler = (param: any) => void;
/**
/
export interface IWorkerPort {
/*
*/
port: any; // 使用 worker.WorkerPort 类型,如果有定义的话
/**
*/
on(messageName: string, handler: MessageHandler): IWorkerPort;
/**
*/
off(messageName: string): IWorkerPort;
/**
*/
processMessage(messageName: string, param: any): boolean;
/**
*/
postMessage(message: any): void;
/**
*/
evalString(messageName: string, functionName: string): IWorkerPort;
}
export const WorkerPort: IWorkerPort = {
/**
*/
port: worker.workerPort,
/**
*/
on(messageName: string, handler: MessageHandler): IWorkerPort {
messageHandlers.set(messageName, handler);
return this;
},
/**
*/
off(messageName: string): IWorkerPort {
messageHandlers.delete(messageName);
return this;
},
/**
*/
processMessage(messageName: string, param: any): boolean {
if (messageHandlers.has(messageName)) {
const handler = messageHandlers.get(messageName);
handler(param);
return true;
}
return false;
},
/**
/
postMessage(message: any): void {
worker.workerPort.postMessage(message);
},
/*
*/
evalString(messageName: string, functionName: string): IWorkerPort {
this.on(messageName, (params) => {
// 如果提供了固定参数,则使用固定参数
const jsCode =
${functionName}('${params}')
;cocos.evalString(jsCode);
});
return this;
},
};
How it works
No response
Alternatives Considered
some suggestion like, to use map to add new statement
// 消息处理器映射表
const messageHandlers = new Map();
/**
*/
type MessageHandler = (param: any) => void;
/**
/
export interface IWorkerPort {
/*
*/
port: any; // 使用 worker.WorkerPort 类型,如果有定义的话
/**
*/
on(messageName: string, handler: MessageHandler): IWorkerPort;
/**
*/
off(messageName: string): IWorkerPort;
/**
*/
processMessage(messageName: string, param: any): boolean;
/**
*/
postMessage(message: any): void;
/**
*/
evalString(messageName: string, functionName: string): IWorkerPort;
}
export const WorkerPort: IWorkerPort = {
/**
*/
port: worker.workerPort,
/**
*/
on(messageName: string, handler: MessageHandler): IWorkerPort {
messageHandlers.set(messageName, handler);
return this;
},
/**
*/
off(messageName: string): IWorkerPort {
messageHandlers.delete(messageName);
return this;
},
/**
*/
processMessage(messageName: string, param: any): boolean {
if (messageHandlers.has(messageName)) {
const handler = messageHandlers.get(messageName);
handler(param);
return true;
}
return false;
},
/**
/
postMessage(message: any): void {
worker.workerPort.postMessage(message);
},
/*
*/
evalString(messageName: string, functionName: string): IWorkerPort {
this.on(messageName, (params) => {
// 如果提供了固定参数,则使用固定参数
const jsCode =
${functionName}('${params}')
;cocos.evalString(jsCode);
});
return this;
},
};
Additional Information
No response
The text was updated successfully, but these errors were encountered: