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 #ifndef OHOS_DISTRIBUTED_ABILITY_MANAGER_JS_CONTINUATION_MANAGER_H 17 #define OHOS_DISTRIBUTED_ABILITY_MANAGER_JS_CONTINUATION_MANAGER_H 18 19 #include <utility> 20 21 #include "continuation_extra_params.h" 22 #include "device_connect_status.h" 23 #include "js_device_selection_listener.h" 24 #include "native_engine/native_engine.h" 25 #include "nlohmann/json.hpp" 26 27 namespace OHOS { 28 namespace DistributedSchedule { 29 using JsDeviceSelectionListenerPtr = std::shared_ptr<JsDeviceSelectionListener>; 30 31 class JsContinuationManager final { 32 public: 33 JsContinuationManager() = default; 34 ~JsContinuationManager() = default; 35 36 static void Finalizer(napi_env env, void* data, void* hint); 37 static napi_value Register(napi_env env, napi_callback_info info); 38 static napi_value Unregister(napi_env env, napi_callback_info info); 39 static napi_value RegisterDeviceSelectionCallback(napi_env env, napi_callback_info info); 40 static napi_value UnregisterDeviceSelectionCallback(napi_env env, napi_callback_info info); 41 static napi_value UpdateConnectStatus(napi_env env, napi_callback_info info); 42 static napi_value StartDeviceManager(napi_env env, napi_callback_info info); 43 static napi_value InitDeviceConnectStateObject(napi_env env, napi_callback_info info); 44 static napi_value InitContinuationModeObject(napi_env env, napi_callback_info info); 45 static napi_value RegisterContinuation(napi_env env, napi_callback_info info); 46 static napi_value UnregisterContinuation(napi_env env, napi_callback_info info); 47 static napi_value UpdateContinuationState(napi_env env, napi_callback_info info); 48 static napi_value StartContinuationDeviceManager(napi_env env, napi_callback_info info); 49 50 private: 51 using CallbackPair = std::pair<std::unique_ptr<NativeReference>, sptr<JsDeviceSelectionListener>>; 52 napi_value OnRegister(napi_env env, napi_callback_info info); 53 napi_value OnUnregister(napi_env env, napi_callback_info info); 54 napi_value OnRegisterDeviceSelectionCallback(napi_env env, napi_callback_info info); 55 napi_value OnUnregisterDeviceSelectionCallback(napi_env env, napi_callback_info info); 56 napi_value OnUpdateConnectStatus(napi_env env, napi_callback_info info); 57 int32_t GetInfoForUpdateConnectStatus(napi_env env, 58 napi_value *argv, int32_t &token, std::string &deviceId, DeviceConnectStatus &deviceConnectStatus); 59 napi_value OnStartDeviceManager(napi_env env, napi_callback_info info); 60 int32_t CheckParamAndGetToken(napi_env env, size_t argc, napi_value *argv, int32_t &token); 61 napi_value OnInitDeviceConnectStateObject(napi_env env, napi_callback_info info); 62 napi_value OnInitContinuationModeObject(napi_env env, napi_callback_info info); 63 static napi_status SetEnumItem(const napi_env &env, napi_value object, const char* name, int32_t value); 64 napi_value OnRegisterContinuation(napi_env env, napi_callback_info info); 65 napi_value OnUnregisterContinuation(napi_env env, napi_callback_info info); 66 napi_value OnUpdateContinuationState(napi_env env, napi_callback_info info); 67 std::string GetErrorInfo(napi_env env, napi_callback_info info, int32_t &token, 68 std::string &deviceId, DeviceConnectStatus &deviceConnectStatus); 69 std::string GetErrorForStartContinuation(napi_env env, napi_callback_info info, 70 int32_t &token, int32_t &unwrapArgc, std::shared_ptr<ContinuationExtraParams> &continuationExtraParams); 71 std::string GetErrorInforForRegisterContination(napi_env env, napi_callback_info info, 72 size_t &unwrapArgc, std::shared_ptr<ContinuationExtraParams> &continuationExtraParams); 73 napi_value OnStartContinuationDeviceManager(napi_env env, napi_callback_info info); 74 75 static bool IsCallbackValid(napi_env env, napi_value listenerObj); 76 bool IsCallbackRegistered(int32_t token, const std::string& cbType); 77 bool UnWrapContinuationExtraParams(const napi_env &env, const napi_value& options, 78 std::shared_ptr<ContinuationExtraParams>& continuationExtraParams); 79 bool UnwrapJsonByPropertyName(const napi_env &env, const napi_value& param, 80 const std::string& field, nlohmann::json& jsonObj); 81 static bool PraseJson(const napi_env &env, const napi_value& jsonField, const napi_value& jsProNameList, 82 uint32_t jsProCount, nlohmann::json& jsonObj); 83 static int32_t ErrorCodeReturn(int32_t code); 84 static std::string ErrorMessageReturn(int32_t code); 85 static std::string OnRegisterDeviceSelectionCallbackParameterCheck(napi_env env, 86 napi_callback_info info, std::string &cbType, int32_t &token, napi_value *jsListenerObj); 87 napi_value GenerateBusinessError(const napi_env &env, int32_t errCode, const std::string &errMsg); 88 std::mutex jsCbMapMutex_; 89 std::map<int32_t, std::map<std::string, CallbackPair>> jsCbMap_; 90 }; 91 92 napi_value JsContinuationManagerInit(napi_env env, napi_value exportObj); 93 } // namespace DistributedSchedule 94 } // namespace OHOS 95 #endif // OHOS_DISTRIBUTED_ABILITY_MANAGER_JS_CONTINUATION_MANAGER_H