• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2025 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 NAPI_SOFTBUS_LINK_ENHANCE_CONNECTION_H_
17 #define NAPI_SOFTBUS_LINK_ENHANCE_CONNECTION_H_
18 
19 #include "napi_link_enhance_utils.h"
20 
21 namespace Communication {
22 namespace OHOS::Softbus {
23 class NapiLinkEnhanceConnection {
24 public:
25     static napi_value Create(napi_env env, napi_callback_info info);
26     static void DefineJSClass(napi_env env);
27     static napi_value Constructor(napi_env env, napi_callback_info info);
28 
29     static napi_value On(napi_env env, napi_callback_info info);
30     static napi_value Off(napi_env env, napi_callback_info info);
31 
32     static napi_value Connect(napi_env env, napi_callback_info info);
33     static napi_value Disconnect(napi_env env, napi_callback_info info);
34     static napi_value Close(napi_env env, napi_callback_info info);
35 
36     static napi_value GetPeerDeviceId(napi_env env, napi_callback_info info);
37     static napi_value SendData(napi_env env, napi_callback_info info);
38 
NapiLinkEnhanceConnection(const std::string & deviceId,const std::string & name)39     explicit NapiLinkEnhanceConnection(const std::string &deviceId, const std::string &name)
40         : deviceId_(deviceId), name_(name) { }
41 
NapiLinkEnhanceConnection(const std::string & deviceId,const std::string & name,const int32_t handle)42     explicit NapiLinkEnhanceConnection(const std::string &deviceId, const std::string &name, const int32_t handle)
43         : deviceId_(deviceId), name_(name), handle_(handle) { }
44     ~NapiLinkEnhanceConnection() = default;
45 
46     static std::vector<NapiLinkEnhanceConnection *> connectionList_;
47     static std::mutex connectionListMutex_;
48     bool IsConnectResultEnable();
49     bool IsDataReceiveEnable();
50     bool IsDisconnectEnable();
51     static thread_local napi_ref consRef_;
52     napi_ref connectResultRef_ = nullptr;
53     napi_ref dataReceivedRef_ = nullptr;
54     napi_ref disconnectRef_ = nullptr;
55     napi_env env_ = nullptr;
56 
57     std::string deviceId_ = "";
58     std::string name_ = "";
59     uint32_t handle_ = 0;
60     enum ConnectionState state_ = ConnectionState::STATE_BASE;
61 private:
62     std::recursive_timed_mutex lock_;
63     bool isEnableConnectResult_ = false;
64     bool isEnableData_ = false;
65     bool isEnableDisconnect_ = false;
SetConnectResultEnable(bool isEnableConnectResult)66     void SetConnectResultEnable(bool isEnableConnectResult)
67     {
68         this->lock_.lock();
69         this->isEnableConnectResult_ = isEnableConnectResult;
70         this->lock_.unlock();
71     }
72 
SetEnableData(bool isEnableData)73     void SetEnableData(bool isEnableData)
74     {
75         this->lock_.lock();
76         this->isEnableData_ = isEnableData;
77         this->lock_.unlock();
78     }
79 
SetEnableDisconnect(bool isEnableDisconnect)80     void SetEnableDisconnect(bool isEnableDisconnect)
81     {
82         this->lock_.lock();
83         this->isEnableDisconnect_ = isEnableDisconnect;
84         this->lock_.unlock();
85     }
86 };
87 } // namespace SoftBus
88 } // namespace Communication
89 #endif /* NAPI_SOFTBUS_LINK_ENHANCE_CONNECTION_H_ */