BBAJSBindingEventBase.h
3.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
//
// 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