BBAJSBindingEventBase.h 3.11 KB
//
//  BBAJSBindingEventedBase.h
//  SWAN
//
//  Created by baidu on 2018/8/12.
//  Copyright © 2018年 baidu. All rights reserved.
//

#import "BBAJSBindingBase.h"

NS_ASSUME_NONNULL_BEGIN

#define JSB_EVENT_BASE_EXPORT BBAJSBindingEventBaseProtocol, BBAJSBExportProtocol, JSExport

/**
* callback全局owner存储私有对象key值
*/
#define BBASMC_CallbackGlobalOwnerKey BBASM_UNCONFUSED_STR_METHOD(@"U1dBTkNhbGxiYWNrR2xvYmFsT3duZXJLZXk=") //BBASMCallbackGlobalOwnerKey
/**
 * 挂在jsContext下全局owner对象的属性名
 */
#define BBASMC_ContextGlobalOwnerProperty BBASM_UNCONFUSED_STR_METHOD(@"X25hU3dhbl9nbG9iYWxfb3duZXI=") //_naSwan_global_owner


typedef void (^BBAJSBindingEventCallback)(NSString *eventName, NSArray* _Nullable eventParams);


#define JSB_EVENT(EVENT_NAME) \
- (void)on##EVENT_NAME:(JSValue *)callback { \
    NSString *eventName = ((NSString *(*)(id, SEL, id))objc_msgSend)(self, NSSelectorFromString(@"eventNameFromString:"), (@#EVENT_NAME)); \
    [self addEventListenerWithEventName:eventName callback:callback]; \
} \
 \
- (void)off##EVENT_NAME:(JSValue *)callback { \
    NSString *eventName = ((NSString *(*)(id, SEL, id))objc_msgSend)(self, NSSelectorFromString(@"eventNameFromString:"), @#EVENT_NAME); \
    [self removeEventListenerWithEventName:eventName callback:callback]; \
} \

@protocol BBAJSBindingEventBaseProtocol <JSB_EXPORT>

/**
 * @brief 向指定元素添加事件
 *
 * @param event 必传, js String, typeof === "string", 指定事件名
 * @param function 必传, 指定要事件触发时执行的js函数
 */
JSExportAs(addEventListener, - (void)addEventListener:(JSValue *)event callback:(JSValue *)callback);

/**
 * @brief 移除由addEventListener()方法添加的事件
 *
 * @param event 必传, js String, typeof === "string", 指定事件名
 * @param function 必传, 指定要事件触发时执行的js函数
 */
JSExportAs(removeEventListener, - (void)removeEventListener:(JSValue *)event callback:(JSValue *)callback);

@end

@interface BBAJSBindingEventBase : BBAJSBindingBase <BBAJSBindingEventBaseProtocol>

/// 通过addEventListener添加的event的callback
@property (nonatomic, strong) BBAJSBindingEventCallback eventCallback;

- (instancetype)initWithJSContext:(JSContext *)jsContext eventOwner:(id _Nullable)eventOwner instance:(id _Nullable)instance;

/**
 * @brief 添加event
 *
 * @param eventName event name
 * @param callback event callback
 */
- (void)addEventListenerWithEventName:(NSString *)eventName callback:(JSValue *)callback;

/**
 * @brief 移除event
 *
 * @param eventName event name
 * @param callback event callback
 */
- (void)removeEventListenerWithEventName:(NSString *)eventName callback:(JSValue *)callback;

/**
 * @brief 触发event
 *
 * @param eventName event name
 * @param args event callback arguments
 */
- (void)triggerEvent:(NSString *)eventName arguments:(NSArray *_Nullable)args;

/**
 * @brief 触发worker的event
 *
 * @param eventName 事件名
 * @param args 消息参数
 */
- (void)triggerWorkerEvent:(NSString *)eventName arguments:(NSArray *)args;

/**
 * @brief 获取小游戏的envVariables
 *
 */
- (NSString *)getEnvVariables;

@end

NS_ASSUME_NONNULL_END