1 /*
2 * Copyright (c) 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 #include "subscribe_context.h"
17
18 #include "constant.h"
19 #include "netmanager_base_log.h"
20 #include "netmanager_base_napi_utils.h"
21
22 static constexpr const int PARAM_NO_OPTIONS = 0;
23
24 static constexpr const int PARAM_HAS_OPTIONS = 1;
25
26 namespace OHOS::NetManagerStandard {
SubscribeContext(napi_env env,EventManager * manager)27 SubscribeContext::SubscribeContext(napi_env env, EventManager *manager)
28 : BaseContext(env, manager), successCallback_(nullptr), failCallback_(nullptr)
29 {
30 }
31
ParseParams(napi_value * params,size_t paramsCount)32 void SubscribeContext::ParseParams(napi_value *params, size_t paramsCount)
33 {
34 if (!CheckParamsType(params, paramsCount)) {
35 return;
36 }
37
38 if (paramsCount == PARAM_HAS_OPTIONS) {
39 SetParseOK(SetSuccessCallback(params[0]) && SetFailCallback(params[0]));
40 return;
41 }
42 NETMANAGER_BASE_LOGI("no callback");
43 SetParseOK(true);
44 }
45
CheckParamsType(napi_value * params,size_t paramsCount)46 bool SubscribeContext::CheckParamsType(napi_value *params, size_t paramsCount)
47 {
48 if (paramsCount == PARAM_NO_OPTIONS) {
49 return true;
50 }
51
52 SetNeedPromise(false);
53
54 if (paramsCount == PARAM_HAS_OPTIONS) {
55 return NapiUtils::GetValueType(GetEnv(), params[0]) == napi_object;
56 }
57 return false;
58 }
59
SetSuccessCallback(napi_value options)60 bool SubscribeContext::SetSuccessCallback(napi_value options)
61 {
62 if (!NapiUtils::HasNamedProperty(GetEnv(), options, KEY_SUCCESS)) {
63 NETMANAGER_BASE_LOGI("do not need success fun");
64 return true;
65 }
66 napi_value callback = NapiUtils::GetNamedProperty(GetEnv(), options, KEY_SUCCESS);
67 if (NapiUtils::GetValueType(GetEnv(), callback) != napi_function) {
68 NETMANAGER_BASE_LOGE("success should be function");
69 return false;
70 }
71 if (successCallback_ != nullptr) {
72 (void)napi_delete_reference(GetEnv(), successCallback_);
73 }
74 GetManager()->AddListener(GetEnv(), EVENT_SUBSCRIBE, callback, false, false);
75 return napi_create_reference(GetEnv(), callback, 1, &successCallback_) == napi_ok;
76 }
77
SetFailCallback(napi_value options)78 bool SubscribeContext::SetFailCallback(napi_value options)
79 {
80 if (!NapiUtils::HasNamedProperty(GetEnv(), options, KEY_FAIL)) {
81 NETMANAGER_BASE_LOGI("do not need fail fun");
82 return true;
83 }
84 napi_value callback = NapiUtils::GetNamedProperty(GetEnv(), options, KEY_FAIL);
85 if (NapiUtils::GetValueType(GetEnv(), callback) != napi_function) {
86 NETMANAGER_BASE_LOGE("success should be function");
87 return false;
88 }
89 if (failCallback_ != nullptr) {
90 (void)napi_delete_reference(GetEnv(), failCallback_);
91 }
92 return napi_create_reference(GetEnv(), callback, 1, &failCallback_) == napi_ok;
93 }
94
GetSuccessCallback() const95 napi_value SubscribeContext::GetSuccessCallback() const
96 {
97 if (successCallback_ == nullptr) {
98 return nullptr;
99 }
100 napi_value callback = nullptr;
101 NAPI_CALL(GetEnv(), napi_get_reference_value(GetEnv(), successCallback_, &callback));
102 return callback;
103 }
104
GetFailCallback() const105 napi_value SubscribeContext::GetFailCallback() const
106 {
107 if (failCallback_ == nullptr) {
108 return nullptr;
109 }
110 napi_value callback = nullptr;
111 NAPI_CALL(GetEnv(), napi_get_reference_value(GetEnv(), failCallback_, &callback));
112 return callback;
113 }
114 } // namespace OHOS::NetManagerStandard