Skip to content

Need worker port export in harmony os and better functions to call thread #18723

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
iwae opened this issue May 20, 2025 · 0 comments
Open

Need worker port export in harmony os and better functions to call thread #18723

iwae opened this issue May 20, 2025 · 0 comments
Assignees
Labels
Env: Native General issue on all native platforms including iOS, Android, MacOS, Windows Feature Request

Comments

@iwae
Copy link
Contributor

iwae commented May 20, 2025

Use Case

it's too hard to call worker port in ark TS and add new statement.

Image

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;

/**

  • WorkerPort 接口定义
    /
    export interface IWorkerPort {
    /
    *
    • 原始 workerPort 引用
      */
      port: any; // 使用 worker.WorkerPort 类型,如果有定义的话

/**

  • 注册消息处理器
  • @param messageName 消息名称
  • @param handler 处理函数
  • @returns this 支持链式调用
    */
    on(messageName: string, handler: MessageHandler): IWorkerPort;

/**

  • 移除消息处理器
  • @param messageName 消息名称
  • @returns this 支持链式调用
    */
    off(messageName: string): IWorkerPort;

/**

  • 处理消息
  • @param messageName 消息名称
  • @param param 消息参数
  • @returns boolean 是否成功处理
    */
    processMessage(messageName: string, param: any): boolean;

/**

  • 转发原始 postMessage 方法
  • @param message 消息内容
    */
    postMessage(message: any): void;

/**

  • 注册消息处理器,当接收到指定消息时调用Cocos函数
  • @param messageName 消息名称
  • @param functionName Cocos环境中的函数名
  • @param params 要传递给函数的参数(可选)
  • @returns this 支持链式调用
    */
    evalString(messageName: string, functionName: string): IWorkerPort;
    }

export const WorkerPort: IWorkerPort = {
/**

  • 原始 workerPort 引用
    */
    port: worker.workerPort,

/**

  • 注册消息处理器
  • @param messageName 消息名称
  • @param handler 处理函数
  • @returns this 支持链式调用
    */
    on(messageName: string, handler: MessageHandler): IWorkerPort {
    messageHandlers.set(messageName, handler);
    return this;
    },

/**

  • 移除消息处理器
  • @param messageName 消息名称
  • @returns this 支持链式调用
    */
    off(messageName: string): IWorkerPort {
    messageHandlers.delete(messageName);
    return this;
    },

/**

  • 处理消息
  • @param messageName 消息名称
  • @param param 消息参数
  • @returns boolean 是否成功处理
    */
    processMessage(messageName: string, param: any): boolean {
    if (messageHandlers.has(messageName)) {
    const handler = messageHandlers.get(messageName);
    handler(param);
    return true;
    }
    return false;
    },

/**

  • 转发原始 postMessage 方法
  • @param message 消息内容
    /
    postMessage(message: any): void {
    worker.workerPort.postMessage(message);
    },
    /
    *
  • 注册消息处理器,当接收到指定消息时调用Cocos函数
  • @param messageName 消息名称
  • @param functionName Cocos环境中的函数名
  • @param params 要传递给函数的参数(可选)
  • @returns this 支持链式调用
    */
    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;

/**

  • WorkerPort 接口定义
    /
    export interface IWorkerPort {
    /
    *
    • 原始 workerPort 引用
      */
      port: any; // 使用 worker.WorkerPort 类型,如果有定义的话

/**

  • 注册消息处理器
  • @param messageName 消息名称
  • @param handler 处理函数
  • @returns this 支持链式调用
    */
    on(messageName: string, handler: MessageHandler): IWorkerPort;

/**

  • 移除消息处理器
  • @param messageName 消息名称
  • @returns this 支持链式调用
    */
    off(messageName: string): IWorkerPort;

/**

  • 处理消息
  • @param messageName 消息名称
  • @param param 消息参数
  • @returns boolean 是否成功处理
    */
    processMessage(messageName: string, param: any): boolean;

/**

  • 转发原始 postMessage 方法
  • @param message 消息内容
    */
    postMessage(message: any): void;

/**

  • 注册消息处理器,当接收到指定消息时调用Cocos函数
  • @param messageName 消息名称
  • @param functionName Cocos环境中的函数名
  • @param params 要传递给函数的参数(可选)
  • @returns this 支持链式调用
    */
    evalString(messageName: string, functionName: string): IWorkerPort;
    }

export const WorkerPort: IWorkerPort = {
/**

  • 原始 workerPort 引用
    */
    port: worker.workerPort,

/**

  • 注册消息处理器
  • @param messageName 消息名称
  • @param handler 处理函数
  • @returns this 支持链式调用
    */
    on(messageName: string, handler: MessageHandler): IWorkerPort {
    messageHandlers.set(messageName, handler);
    return this;
    },

/**

  • 移除消息处理器
  • @param messageName 消息名称
  • @returns this 支持链式调用
    */
    off(messageName: string): IWorkerPort {
    messageHandlers.delete(messageName);
    return this;
    },

/**

  • 处理消息
  • @param messageName 消息名称
  • @param param 消息参数
  • @returns boolean 是否成功处理
    */
    processMessage(messageName: string, param: any): boolean {
    if (messageHandlers.has(messageName)) {
    const handler = messageHandlers.get(messageName);
    handler(param);
    return true;
    }
    return false;
    },

/**

  • 转发原始 postMessage 方法
  • @param message 消息内容
    /
    postMessage(message: any): void {
    worker.workerPort.postMessage(message);
    },
    /
    *
  • 注册消息处理器,当接收到指定消息时调用Cocos函数
  • @param messageName 消息名称
  • @param functionName Cocos环境中的函数名
  • @param params 要传递给函数的参数(可选)
  • @returns this 支持链式调用
    */
    evalString(messageName: string, functionName: string): IWorkerPort {
    this.on(messageName, (params) => {
    // 如果提供了固定参数,则使用固定参数
    const jsCode = ${functionName}('${params}');
    cocos.evalString(jsCode);
    });
    return this;
    },

};

Additional Information

No response

@iwae iwae added Feature Request Needs Triage Needs to be assigned by the team labels May 20, 2025
@qiuguohua qiuguohua self-assigned this May 20, 2025
@qiuguohua qiuguohua added Env: Native General issue on all native platforms including iOS, Android, MacOS, Windows and removed Needs Triage Needs to be assigned by the team labels May 20, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Env: Native General issue on all native platforms including iOS, Android, MacOS, Windows Feature Request
Projects
Status: Todo
Development

No branches or pull requests

2 participants