• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef BASE_NOTIFICATION_CES_STANDARD_CESFWK_KITS_NAPI_COMMON_EVENT_INCLUDE_COMMON_EVENT_H
17 #define BASE_NOTIFICATION_CES_STANDARD_CESFWK_KITS_NAPI_COMMON_EVENT_INCLUDE_COMMON_EVENT_H
18 
19 #include "common_event_constant.h"
20 #include "common_event_manager.h"
21 #include "napi/native_api.h"
22 #include "napi/native_node_api.h"
23 
24 namespace OHOS {
25 namespace EventFwkNapi {
26 using namespace OHOS::EventFwk;
27 
28 static const int32_t CREATE_MAX_PARA = 2;
29 static const int32_t SUBSCRIBE_MAX_PARA = 2;
30 static const int32_t UNSUBSCRIBE_MAX_PARA = 2;
31 static const int32_t PUBLISH_MAX_PARA_BY_PUBLISHDATA = 3;
32 static const int32_t PUBLISH_MAX_PARA_BY_USERID = 4;
33 static const int8_t NO_ERROR = 0;
34 static const int8_t ERR_CES_FAILED = 1;
35 
36 class SubscriberInstance;
37 struct AsyncCallbackInfoSubscribe;
38 
39 struct subscriberInstanceInfo {
40     std::vector<AsyncCallbackInfoSubscribe *> asyncCallbackInfo;
41     std::shared_ptr<AsyncCommonEventResult> commonEventResult = nullptr;
42 };
43 
44 static thread_local napi_ref g_CommonEventSubscriber = nullptr;
45 static std::map<std::shared_ptr<SubscriberInstance>, subscriberInstanceInfo> subscriberInstances;
46 static std::mutex subscriberInsMutex;
47 
48 struct CallbackPromiseInfo {
49     napi_ref callback = nullptr;
50     napi_deferred deferred = nullptr;
51     bool isCallback = false;
52     int8_t errorCode = NO_ERROR;
53 };
54 
55 struct AsyncCallbackInfoSubscribe {
56     napi_env env = nullptr;
57     napi_async_work asyncWork;
58     napi_ref callback = nullptr;
59     std::shared_ptr<SubscriberInstance> subscriber = nullptr;
60     int8_t errorCode = NO_ERROR;
61 };
62 
63 struct AsyncCallbackInfoUnsubscribe {
64     napi_env env = nullptr;
65     napi_async_work asyncWork;
66     napi_ref callback = nullptr;
67     size_t argc = 0;
68     std::shared_ptr<SubscriberInstance> subscriber = nullptr;
69     int8_t errorCode = NO_ERROR;
70 };
71 
72 struct AsyncCallbackInfoSubscribeInfo {
73     napi_env env = nullptr;
74     napi_async_work asyncWork;
75     SubscriberInstance *objectInfo = nullptr;
76     std::vector<std::string> events;
77     std::string permission;
78     std::string deviceId;
79     int32_t userId = UNDEFINED_USER;
80     int32_t priority = 0;
81     CallbackPromiseInfo info;
82 };
83 
84 struct AsyncCallbackInfoOrderedCommonEvent {
85     napi_env env = nullptr;
86     napi_async_work asyncWork;
87     SubscriberInstance *objectInfo = nullptr;
88     bool isOrdered = false;
89     CallbackPromiseInfo info;
90 };
91 
92 struct AsyncCallbackInfoStickyCommonEvent {
93     napi_env env = nullptr;
94     napi_async_work asyncWork;
95     SubscriberInstance *objectInfo = nullptr;
96     bool isSticky = false;
97     CallbackPromiseInfo info;
98 };
99 
100 struct AsyncCallbackInfoGetCode {
101     napi_env env = nullptr;
102     napi_async_work asyncWork;
103     SubscriberInstance *objectInfo = nullptr;
104     int code = 0;
105     CallbackPromiseInfo info;
106 };
107 
108 struct AsyncCallbackInfoSetCode {
109     napi_env env = nullptr;
110     napi_async_work asyncWork;
111     SubscriberInstance *objectInfo = nullptr;
112     int code = 0;
113     CallbackPromiseInfo info;
114 };
115 
116 struct AsyncCallbackInfoGetData {
117     napi_env env = nullptr;
118     napi_async_work asyncWork;
119     SubscriberInstance *objectInfo = nullptr;
120     std::string data;
121     CallbackPromiseInfo info;
122 };
123 
124 struct AsyncCallbackInfoSetData {
125     napi_env env = nullptr;
126     napi_async_work asyncWork;
127     SubscriberInstance *objectInfo = nullptr;
128     std::string data;
129     CallbackPromiseInfo info;
130 };
131 
132 struct AsyncCallbackInfoSetCodeAndData {
133     napi_env env = nullptr;
134     napi_async_work asyncWork;
135     SubscriberInstance *objectInfo = nullptr;
136     int code = 0;
137     std::string data;
138     CallbackPromiseInfo info;
139 };
140 
141 struct AsyncCallbackInfoAbort {
142     napi_env env = nullptr;
143     napi_async_work asyncWork;
144     SubscriberInstance *objectInfo = nullptr;
145     CallbackPromiseInfo info;
146 };
147 
148 struct AsyncCallbackInfoClearAbort {
149     napi_env env = nullptr;
150     napi_async_work asyncWork;
151     SubscriberInstance *objectInfo = nullptr;
152     CallbackPromiseInfo info;
153 };
154 
155 struct AsyncCallbackInfoGetAbort {
156     napi_env env = nullptr;
157     napi_async_work asyncWork;
158     SubscriberInstance *objectInfo = nullptr;
159     bool abortEvent = false;
160     CallbackPromiseInfo info;
161 };
162 
163 struct AsyncCallbackInfoFinish {
164     napi_env env = nullptr;
165     napi_async_work asyncWork;
166     SubscriberInstance *objectInfo = nullptr;
167     CallbackPromiseInfo info;
168 };
169 
170 struct AsyncCallbackInfoCreate {
171     napi_env env = nullptr;
172     napi_async_work asyncWork;
173     napi_ref subscribeInfo = nullptr;
174     CallbackPromiseInfo info;
175     napi_value result = nullptr;
176 };
177 
178 struct AsyncCallbackInfoPublish {
179     napi_env env = nullptr;
180     napi_async_work asyncWork;
181     napi_ref callback = nullptr;
182     CommonEventData commonEventData;
183     CommonEventPublishInfo commonEventPublishInfo;
184     int32_t userId = UNDEFINED_USER;
185     int8_t errorCode = NO_ERROR;
186 };
187 
188 struct CommonEventPublishDataByjs {
189     std::string bundleName;
190     std::string data;
191     int code = 0;
192     std::vector<std::string> subscriberPermissions;
193     bool isOrdered = false;
194     bool isSticky = false;
195     AAFwk::WantParams wantParams;
196 };
197 
198 struct CommonEventDataWorker {
199     napi_env env = nullptr;
200     napi_ref ref = nullptr;
201     Want want;
202     int code = 0;
203     std::string data;
204 };
205 
206 class SubscriberInstance : public CommonEventSubscriber {
207 public:
208     SubscriberInstance(const CommonEventSubscribeInfo &sp);
209     ~SubscriberInstance();
210 
211     virtual void OnReceiveEvent(const CommonEventData &data) override;
212 
213     void SetEnv(const napi_env &env);
214     void SetCallbackRef(const napi_ref &ref);
215 
216 private:
217     napi_env env_ = nullptr;
218     napi_ref ref_ = nullptr;
219 };
220 
221 napi_value NapiGetNull(napi_env env);
222 
223 napi_value GetCallbackErrorValue(napi_env env, int8_t errorCode);
224 
225 napi_value ParseParametersByCreateSubscriber(
226     const napi_env &env, const napi_value (&argv)[CREATE_MAX_PARA], const size_t &argc, napi_ref &callback);
227 
228 void SetCallback(const napi_env &env, const napi_ref &callbackIn, const int8_t &errorCode, const napi_value &result);
229 
230 void SetCallback(const napi_env &env, const napi_ref &callbackIn, const napi_value &result);
231 
232 void SetPromise(const napi_env &env, const napi_deferred &deferred, const int8_t &errorCode, const napi_value &result);
233 
234 void ReturnCallbackPromise(const napi_env &env, const CallbackPromiseInfo &info, const napi_value &result);
235 
236 void PaddingAsyncCallbackInfoCreateSubscriber(const napi_env &env, const size_t &argc,
237     AsyncCallbackInfoCreate *&asynccallbackinfo, const napi_ref &callback, napi_value &promise);
238 
239 napi_value CreateSubscriber(napi_env env, napi_callback_info info);
240 
241 napi_value ParseParametersByGetSubscribeInfo(
242     const napi_env &env, const size_t &argc, const napi_value (&argv)[1], napi_ref &callback);
243 
244 void SetEventsResult(const napi_env &env, const std::vector<std::string> &events, napi_value &commonEventSubscribeInfo);
245 
246 void SetPublisherPermissionResult(
247     const napi_env &env, const std::string &permission, napi_value &commonEventSubscribeInfo);
248 
249 void SetPublisherDeviceIdResult(const napi_env &env, const std::string &deviceId, napi_value &commonEventSubscribeInfo);
250 
251 void SetPublisherUserIdResult(const napi_env &env, const int32_t &userId, napi_value &commonEventSubscribeInfo);
252 
253 void SetPublisherPriorityResult(const napi_env &env, const int32_t &priority, napi_value &commonEventSubscribeInfo);
254 
255 void PaddingAsyncCallbackInfoGetSubscribeInfo(const napi_env &env, const size_t &argc,
256     AsyncCallbackInfoSubscribeInfo *&asynccallbackinfo, const napi_ref &callback, napi_value &promise);
257 
258 void PaddingNapiCreateAsyncWorkCallbackInfo(
259     AsyncCallbackInfoSubscribeInfo *&asynccallbackinfo, SubscriberInstance *&subscriber);
260 
261 void SetNapiResult(const napi_env &env, const AsyncCallbackInfoSubscribeInfo *asynccallbackinfo, napi_value &result);
262 
263 napi_value GetSubscribeInfo(napi_env env, napi_callback_info info);
264 
265 napi_value ParseParametersByIsOrderedCommonEvent(
266     const napi_env &env, const napi_value (&argv)[1], size_t argc, napi_ref &callback);
267 
268 void PaddingAsyncCallbackInfoIsOrderedCommonEvent(const napi_env &env, const size_t &argc,
269     AsyncCallbackInfoOrderedCommonEvent *&asynccallbackinfo, const napi_ref &callback, napi_value &promise);
270 
271 napi_value IsOrderedCommonEvent(napi_env env, napi_callback_info info);
272 
273 napi_value ParseParametersByIsStickyCommonEvent(
274     const napi_env &env, const napi_value (&argv)[1], size_t argc, napi_ref &callback);
275 
276 void PaddingAsyncCallbackInfoIsStickyCommonEvent(const napi_env &env, const size_t &argc,
277     AsyncCallbackInfoStickyCommonEvent *&asynccallbackinfo, const napi_ref &callback, napi_value &promise);
278 
279 napi_value IsStickyCommonEvent(napi_env env, napi_callback_info info);
280 
281 napi_value ParseParametersByGetCode(const napi_env &env, const napi_value (&argv)[1], size_t argc, napi_ref &callback);
282 
283 void PaddingAsyncCallbackInfoGetCode(const napi_env &env, const size_t &argc,
284     AsyncCallbackInfoGetCode *&asynccallbackinfo, const napi_ref &callback, napi_value &promise);
285 
286 std::shared_ptr<AsyncCommonEventResult> GetAsyncResult(const SubscriberInstance *objectInfo);
287 
288 napi_value GetCode(napi_env env, napi_callback_info info);
289 
290 napi_value ParseParametersBySetCode(
291     const napi_env &env, const napi_value (&argv)[2], size_t argc, int &code, napi_ref &callback);
292 
293 void PaddingAsyncCallbackInfoSetCode(const napi_env &env, const size_t &argc,
294     AsyncCallbackInfoSetCode *&asynccallbackinfo, const napi_ref &callback, napi_value &promise);
295 
296 napi_value SetCode(napi_env env, napi_callback_info info);
297 
298 napi_value ParseParametersByGetData(const napi_env &env, const napi_value (&argv)[1], size_t argc, napi_ref &callback);
299 
300 void PaddingAsyncCallbackInfoGetData(const napi_env &env, const size_t &argc,
301     AsyncCallbackInfoGetData *&asynccallbackinfo, const napi_ref &callback, napi_value &promise);
302 
303 napi_value GetData(napi_env env, napi_callback_info info);
304 
305 napi_value ParseParametersBySetData(
306     const napi_env &env, const napi_value (&argv)[2], size_t argc, std::string &data, napi_ref &callback);
307 
308 void PaddingAsyncCallbackInfoSetData(const napi_env &env, const size_t &argc,
309     AsyncCallbackInfoSetData *&asynccallbackinfo, const napi_ref &callback, napi_value &promise);
310 
311 napi_value SetData(napi_env env, napi_callback_info info);
312 
313 napi_value ParseParametersBySetCodeAndData(
314     const napi_env &env, const napi_value (&argv)[3], size_t argc, int &code, std::string &data, napi_ref &callback);
315 
316 void PaddingAsyncCallbackInfoSetCodeAndData(const napi_env &env, const size_t &argc,
317     AsyncCallbackInfoSetCodeAndData *&asynccallbackinfo, const napi_ref &callback, napi_value &promise);
318 
319 napi_value SetCodeAndData(napi_env env, napi_callback_info info);
320 
321 napi_value ParseParametersByAbort(const napi_env &env, const napi_value (&argv)[1], size_t argc, napi_ref &callback);
322 
323 void PaddingAsyncCallbackInfoAbort(const napi_env &env, const size_t &argc, AsyncCallbackInfoAbort *&asynccallbackinfo,
324     const napi_ref &callback, napi_value &promise);
325 
326 napi_value AbortCommonEvent(napi_env env, napi_callback_info info);
327 
328 napi_value ParseParametersByClearAbort(
329     const napi_env &env, const napi_value (&argv)[1], size_t argc, napi_ref &callback);
330 
331 void PaddingAsyncCallbackInfoClearAbort(const napi_env &env, const size_t &argc,
332     AsyncCallbackInfoClearAbort *&asynccallbackinfo, const napi_ref &callback, napi_value &promise);
333 
334 napi_value ClearAbortCommonEvent(napi_env env, napi_callback_info info);
335 
336 napi_value ParseParametersByGetAbort(const napi_env &env, const napi_value (&argv)[1], size_t argc, napi_ref &callback);
337 
338 void PaddingAsyncCallbackInfoGetAbort(const napi_env &env, const size_t &argc,
339     AsyncCallbackInfoGetAbort *&asynccallbackinfo, const napi_ref &callback, napi_value &promise);
340 
341 napi_value GetAbortCommonEvent(napi_env env, napi_callback_info info);
342 
343 napi_value ParseParametersByFinish(const napi_env &env, const napi_value (&argv)[1], size_t argc, napi_ref &callback);
344 
345 void PaddingAsyncCallbackInfoFinish(const napi_env &env, const size_t &argc,
346     AsyncCallbackInfoFinish *&asynccallbackinfo, const napi_ref &callback, napi_value &promise);
347 
348 napi_value FinishCommonEvent(napi_env env, napi_callback_info info);
349 
350 napi_value GetSubscriberBySubscribe(
351     const napi_env &env, const napi_value &value, std::shared_ptr<SubscriberInstance> &subscriber);
352 
353 napi_value ParseParametersBySubscribe(const napi_env &env, const napi_value (&argv)[SUBSCRIBE_MAX_PARA],
354     std::shared_ptr<SubscriberInstance> &subscriber, napi_ref &callback);
355 
356 napi_value Subscribe(napi_env env, napi_callback_info info);
357 
358 napi_value GetBundlenameByPublish(const napi_env &env, const napi_value &value, std::string &bundleName);
359 
360 napi_value GetDataByPublish(const napi_env &env, const napi_value &value, std::string &data);
361 
362 napi_value GetCodeByPublish(const napi_env &env, const napi_value &value, int &code);
363 
364 napi_value GetSubscriberPermissionsByPublish(
365     const napi_env &env, const napi_value &value, std::vector<std::string> &subscriberPermissions);
366 
367 napi_value GetIsOrderedByPublish(const napi_env &env, const napi_value &value, bool &isOrdered);
368 
369 napi_value GetIsStickyByPublish(const napi_env &env, const napi_value &value, bool &isSticky);
370 
371 napi_value GetParametersByPublish(const napi_env &env, const napi_value &value, AAFwk::WantParams &wantParams);
372 
373 napi_value ParseParametersByPublish(const napi_env &env, const napi_value (&argv)[PUBLISH_MAX_PARA_BY_PUBLISHDATA],
374     const size_t &argc, std::string &event, CommonEventPublishDataByjs &commonEventPublishData, napi_ref &callback);
375 
376 void PaddingCallbackInfoPublish(Want &want, AsyncCallbackInfoPublish *&asynccallbackinfo,
377     const CommonEventPublishDataByjs &commonEventPublishDatajs);
378 
379 napi_value Publish(napi_env env, napi_callback_info info);
380 
381 napi_value ParseParametersByPublishAsUser(const napi_env &env, const napi_value (&argv)[PUBLISH_MAX_PARA_BY_USERID],
382     const size_t &argc, std::string &event, int32_t &userId, CommonEventPublishDataByjs &commonEventPublishData,
383     napi_ref &callback);
384 
385 napi_value PublishAsUser(napi_env env, napi_callback_info info);
386 
387 napi_value GetSubscriberByUnsubscribe(
388     const napi_env &env, const napi_value &value, std::shared_ptr<SubscriberInstance> &subscriber, bool &isFind);
389 
390 napi_value ParseParametersByUnsubscribe(const napi_env &env, const size_t &argc,
391     const napi_value (&argv)[UNSUBSCRIBE_MAX_PARA], std::shared_ptr<SubscriberInstance> &subscriber,
392     napi_ref &callback);
393 
394 void NapiDeleteSubscribe(const napi_env &env, std::shared_ptr<SubscriberInstance> &subscriber);
395 
396 napi_value Unsubscribe(napi_env env, napi_callback_info info);
397 
398 napi_value GetEventsByCreateSubscriber(const napi_env &env, const napi_value &argv, std::vector<std::string> &events);
399 
400 napi_value GetPublisherPermissionByCreateSubscriber(
401     const napi_env &env, const napi_value &argv, std::string &permission, bool &hasProperty);
402 
403 napi_value GetPublisherDeviceIdByCreateSubscriber(
404     const napi_env &env, const napi_value &argv, std::string &publisherDeviceId, bool &hasProperty);
405 
406 napi_value GetUserIdByCreateSubscriber(const napi_env &env, const napi_value &argv, CommonEventSubscribeInfo &info);
407 
408 napi_value GetPriorityByCreateSubscriber(const napi_env &env, const napi_value &argv, int &priority, bool &hasProperty);
409 
410 napi_value CommonEventSubscriberConstructor(napi_env env, napi_callback_info info);
411 
412 napi_value CommonEventSubscriberInit(napi_env env, napi_value exports);
413 
414 napi_value CommonEventInit(napi_env env, napi_value exports);
415 }  // namespace EventFwkNapi
416 }  // namespace OHOS
417 
418 #endif  // BASE_NOTIFICATION_CES_STANDARD_CESFWK_KITS_NAPI_COMMON_EVENT_INCLUDE_COMMON_EVENT_H
419