EmitterUtils.ets 1.5 KB
import emitter from '@ohos.events.emitter';

const TAG: string = 'EmitterUtils';

/**
 * 线程间通信简单工具
 */
export class EmitterUtils {
  /**
   * 发送空消息
   * @param eventId 事件id
   */
  static sendEmptyEvent(eventId: number) {
    let event: emitter.InnerEvent = {
      eventId: eventId,
      priority: emitter.EventPriority.IMMEDIATE
    };
    emitter.emit(event);
  }

  /**
   * 发送消息
   * @param eventId 事件id
   * @param str 字符串数据
   */
  static sendEvent(eventId: number, str?: string | number) {
    let event: emitter.InnerEvent = {
      eventId: eventId,
      priority: emitter.EventPriority.IMMEDIATE
    };
    let eventData: emitter.EventData = {
      data: {
        jsonStr: str
      }
    };
    emitter.emit(event, eventData);
  }

  /**
   * 接收消息
   * @param eventId 事件id
   * @param callback 回调函数
   */
  static receiveEvent(eventId: number, callback: (str?: string) => void) {
    let event: emitter.InnerEvent = {
      eventId: eventId
    };

    // 收到eventId事件后执行该回调
    let callback1 = (eventData?: emitter.EventData): void => {
      if (eventData && eventData.data) {
        try {
          let jsonObject: EmitterBean = JSON.parse(JSON.stringify(eventData.data))
          callback(jsonObject.jsonStr)
        } catch (err) {
          callback()
        }
      } else {
        callback()
      }
    };
    // 订阅eventId事件
    emitter.on(event, callback1);
  }
}

interface EmitterBean {
  jsonStr: string
}