• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2024 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_COLLAB_SESSION_MANAGER_JS_ABILITY_CONNECTION_MANAGER_H
17 #define OHOS_DISTRIBUTED_COLLAB_SESSION_MANAGER_JS_ABILITY_CONNECTION_MANAGER_H
18 
19 #include <utility>
20 
21 #include "ability_connection_info.h"
22 #include "ability_info.h"
23 #include "js_ability_connection_session_listener.h"
24 #include "native_engine/native_engine.h"
25 #include "pixel_map_napi.h"
26 
27 namespace OHOS {
28 namespace DistributedCollab {
29 using JsAbilityConnectionSessionListenerPtr = std::shared_ptr<JsAbilityConnectionSessionListener>;
30 struct AsyncConnectCallbackInfo {
31     napi_async_work asyncWork = nullptr;
32     napi_deferred deferred = nullptr;
33     napi_threadsafe_function tsfn = nullptr;
34     int32_t sessionId;
35     int32_t funResult;
36     ConnectResult result;
37 };
38 
39 struct AsyncCallbackInfo {
40     napi_async_work asyncWork = nullptr;
41     napi_deferred deferred = nullptr;
42     napi_threadsafe_function tsfn;
43     int32_t result;
44     int32_t sessionId;
45     std::string token;
46     std::string msg;
47     std::shared_ptr<AVTransDataBuffer> buffer = nullptr;
48     std::shared_ptr<Media::PixelMap> image = nullptr;
49     int32_t streamId;
50     StreamParams streamParam;
51     int32_t imageQuality = 30;
52 };
53 
54 enum BussinessErrorCode {
55     // Permission verification failed.
56     ERR_INVALID_PERMISSION = 201,
57     // The caller is not a system application.
58     ERR_NOT_SYSTEM_APP = 202,
59     // Input parameter error.
60     ERR_INVALID_PARAMS = 401,
61     // Multiple streams can not be created.
62     ERR_ONLY_SUPPORT_ONE_STREAM = 29425664,
63     // The stream at the receive end is not started.
64     ERR_RECEIVE_STREAM_NOT_START = 29425665,
65 };
66 
67 class JsAbilityConnectionManager final {
68 public:
69     JsAbilityConnectionManager() = default;
70     ~JsAbilityConnectionManager() = default;
71 
72     static napi_value CreateAbilityConnectionSession(napi_env env, napi_callback_info info);
73     static napi_value DestroyAbilityConnectionSession(napi_env env, napi_callback_info info);
74     static napi_value GetPeerInfoById(napi_env env, napi_callback_info info);
75     static napi_value RegisterAbilityConnectionSessionCallback(napi_env env, napi_callback_info info);
76     static napi_value UnregisterAbilityConnectionSessionCallback(napi_env env, napi_callback_info info);
77     static napi_value Connect(napi_env env, napi_callback_info info);
78     static napi_value DisConnect(napi_env env, napi_callback_info info);
79     static napi_value AcceptConnect(napi_env env, napi_callback_info info);
80     static napi_value Reject(napi_env env, napi_callback_info info);
81     static napi_value SendMessage(napi_env env, napi_callback_info info);
82     static napi_value SendData(napi_env env, napi_callback_info info);
83     static napi_value SendImage(napi_env env, napi_callback_info info);
84     static napi_value CreateStream(napi_env env, napi_callback_info info);
85     static napi_value SetSurfaceId(napi_env env, napi_callback_info info);
86     static napi_value GetSurfaceId(napi_env env, napi_callback_info info);
87     static napi_value UpdateSurfaceParam(napi_env env, napi_callback_info info);
88     static napi_value DestroyStream(napi_env env, napi_callback_info info);
89     static napi_value StartStream(napi_env env, napi_callback_info info);
90     static napi_value StopStream(napi_env env, napi_callback_info info);
91 
92     static napi_value OnCreateAbilityConnectionSession(napi_env env, napi_callback_info info);
93 
94 private:
95     static bool JsToServiceName(const napi_env &env, const napi_value &jsValue,
96         std::string& serviceName);
97     static bool JsToAbilityInfo(const napi_env &env, const napi_value &jsValue,
98         std::shared_ptr<OHOS::AppExecFwk::AbilityInfo>& abilityInfo);
99     static bool JsToPeerInfo(const napi_env &env, const napi_value &jsValue, PeerInfo &peerInfo);
100     static int32_t JSToConnectOption(const napi_env &env, const napi_value &jsValue, ConnectOption &option);
101     static bool JsToStreamParam(const napi_env &env, const napi_value &jsValue, StreamParams &streamParam);
102     static bool GetStreamParamBitrate(const napi_env &env, const napi_value &jsValue, StreamParams &streamParam);
103     static bool JsToSurfaceParam(const napi_env &env, const napi_value &jsValue, SurfaceParams &surfaceParam);
104 
105     static void ConnectThreadsafeFunctionCallback(napi_env env, napi_value js_callback, void* context, void* data);
106     static napi_status CreateConnectThreadsafeFunction(napi_env env, napi_value js_func,
107         napi_threadsafe_function* tsfn);
108     static void ExecuteConnect(napi_env env, void *data);
109     static void CompleteAsyncConnectWork(napi_env env, napi_status status, void* data);
110     static void ExecuteAcceptConnect(napi_env env, void *data);
111     static void ExecuteSendMessage(napi_env env, void *data);
112     static void ExecuteSendData(napi_env env, void *data);
113     static void ExecuteSendImage(napi_env env, void *data);
114     static void CompleteAsyncWork(napi_env env, napi_status status, void* data);
115     static void ExecuteCreateStream(napi_env env, void *data);
116     static void CompleteAsyncCreateStreamWork(napi_env env, napi_status status, void* data);
117     static void CreateSendDataAsyncWork(napi_env env, AsyncCallbackInfo* asyncCallbackInfo);
118     static void CreateStreamAsyncWork(napi_env env, AsyncCallbackInfo* asyncCallbackInfo);
119     static napi_value CreateSendImageAsyncWork(napi_env env, AsyncCallbackInfo* asyncCallbackInfo);
120 
121     static bool IsSystemApp();
122     static bool JsToInt32(const napi_env &env, const napi_value &value,
123         const std::string &valueName, int32_t &strValue);
124     static bool JsToString(const napi_env &env, const napi_value &value, const std::string &valueName,
125         std::string &strValue);
126     static bool JsObjectToString(const napi_env &env, const napi_value &object, const std::string &fieldStr,
127         std::string& fieldRef);
128     static bool JsObjectToBool(const napi_env &env, const napi_value &object, const std::string &fieldStr,
129         bool &fieldRef);
130     static bool JsObjectToInt(const napi_env &env, const napi_value &object, const std::string &fieldStr,
131         int32_t &fieldRef);
132     static int32_t CheckEventType(const std::string& eventType);
133     static bool UnwrapOptions(napi_env env, napi_value options, ConnectOption &connectOption);
134     static bool UnwrapStartOptions(napi_env env, napi_value startOptionsVal, ConnectOption &connectOption);
135     static bool UnwrapParameters(napi_env env, napi_value parameters, ConnectOption &option);
136     static bool IsTypeForNapiValue(napi_env env, napi_value param, napi_valuetype expectType);
137     static napi_value WrapPeerInfo(napi_env& env, const PeerInfo& peerInfo);
138     static int32_t CheckConnectOption(const ConnectOption &connectOption);
139     static napi_value ExecuteCreateSession(const std::string& serviceName,
140         std::shared_ptr<OHOS::AppExecFwk::AbilityInfo>& abilityInfo, PeerInfo& peerInfo,
141         ConnectOption& connectOption, const napi_env& env);
142 };
143 
144 napi_value JsAbilityConnectionManagerInit(napi_env env, napi_value exportObj);
145 } // namespace DistributedCollab
146 } // namespace OHOS
147 #endif // OHOS_DISTRIBUTED_COLLAB_SESSION_MANAGER_JS_ABILITY_CONNECTION_MANAGER_H