1 /* 2 * Copyright (c) 2024-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 OHOS_DISTRIBUTED_ABILITY_CONNECTION_MANAGER_H 17 #define OHOS_DISTRIBUTED_ABILITY_CONNECTION_MANAGER_H 18 19 #include <atomic> 20 #include <map> 21 #include <memory> 22 23 #include "ability_connection_info.h" 24 #include "ability_connection_session.h" 25 #include "ability_connection_session_listener.h" 26 #include "single_instance.h" 27 #include "ability_info.h" 28 #include "js_ability_connection_session_listener.h" 29 30 namespace OHOS { 31 namespace DistributedCollab { 32 class AbilityConnectionManager { 33 DECLARE_SINGLE_INSTANCE_BASE(AbilityConnectionManager); 34 public: 35 AbilityConnectionManager(); 36 ~AbilityConnectionManager(); 37 38 int32_t CreateSession(const std::string& serverId, std::shared_ptr<OHOS::AppExecFwk::AbilityInfo> abilityInfo, 39 PeerInfo& peerInfo, ConnectOption& opt, int32_t& sessionId); 40 int32_t DestroySession(int32_t sessionId); 41 42 int32_t getPeerInfoBySessionId(int32_t sessionId, PeerInfo& peerInfo); 43 44 using ConnectCallback = std::function<void(const ConnectResult& result)>; 45 int32_t ConnectSession(int32_t sessionId, ConnectCallback& callback); 46 int32_t DisconnectSession(int32_t sessionId); 47 48 int32_t AcceptConnect(int32_t sessionId, const std::string& token); 49 int32_t Reject(const std::string& token, const std::string& reason); 50 51 int32_t NotifyCollabResult(int32_t sessionId, int32_t result, const std::string& peerServerName, 52 const std::string& dmsServerToken, const std::string& reason); 53 int32_t NotifyDisconnect(int32_t sessionId); 54 55 int32_t SendMessage(int32_t sessionId, const std::string& msg); 56 int32_t SendData(int32_t sessionId, const std::shared_ptr<AVTransDataBuffer>& buffer); 57 int32_t SendImage(int32_t sessionId, const std::shared_ptr<Media::PixelMap> &pixelMapPtr, int32_t imageQuality); 58 int32_t SendFile(int32_t sessionId, const std::vector<std::string>& sFiles, 59 const std::vector<std::string>& dFiles); 60 61 int32_t CreateStream(int32_t sessionId, const StreamParams& param, int32_t& streamId); 62 int32_t SetSurfaceId(int32_t streamId, const std::string& surfaceId, const SurfaceParams& param); 63 int32_t GetSurfaceId(int32_t streamId, const SurfaceParams& param, std::string& surfaceId); 64 int32_t UpdateSurfaceParam(int32_t streamId, const SurfaceParams& param); 65 int32_t DestroyStream(int32_t streamId); 66 int32_t StartStream(int32_t streamId); 67 int32_t StopStream(int32_t streamId); 68 int32_t RegisterEventCallback(int32_t sessionId, const std::string& eventType, 69 const std::shared_ptr<JsAbilityConnectionSessionListener>& listener); 70 int32_t UnregisterEventCallback(int32_t sessionId, const std::string& eventType); 71 int32_t NotifyWifiOpen(int32_t sessionId); 72 int32_t RegisterEventCallback(int32_t sessionId, 73 const std::shared_ptr<IAbilityConnectionSessionListener>& listener); 74 int32_t UnregisterEventCallback(int32_t sessionId); 75 int32_t UpdateClientSession(const AbilityConnectionSessionInfo& sessionInfo, 76 const int32_t sessionId); 77 int32_t DeleteClientSession(const AbilityConnectionSessionInfo& sessionInfo); 78 int32_t UpdateServerSession(const AbilityConnectionSessionInfo& sessionInfo, 79 const int32_t sessionId); 80 int32_t DeleteConnectSession(const AbilityConnectionSessionInfo& sessionInfo, int32_t sessionId); 81 std::string GetSessionToken(int32_t sessionId); 82 int32_t NotifyPeerVersion(int32_t sessionId, int32_t version); 83 void FinishSessionConnect(int32_t sessionId); 84 85 private: 86 std::shared_mutex sessionMutex_; 87 std::map <int32_t, std::shared_ptr<AbilityConnectionSession>> sessionMap_; 88 std::atomic<int32_t> sessionId_ = 100; 89 std::atomic<int32_t> streamId_ = 1000; 90 91 std::shared_mutex streamMutex_; 92 std::map<int32_t, int32_t> streamMap_; 93 94 std::mutex connectSessionMutex_; 95 //Record the client session that invokes connect. 96 std::map<AbilityConnectionSessionInfo, int32_t> clientSessionMap_; 97 //Record the server session that invokes acceptConnect. 98 std::map<AbilityConnectionSessionInfo, int32_t> serverSessionMap_; 99 100 private: 101 bool IsVaildPeerInfo(const PeerInfo& peerInfo); 102 bool IsVaildConnectOption(const ConnectOption& opt); 103 std::string GetServerSocketName(int32_t userId, int32_t pid, const std::string& bundle); 104 std::shared_ptr<AbilityConnectionSession> GetAbilityConnectionSession(const int32_t sessionId); 105 std::shared_ptr<AbilityConnectionSession> GetAbilityConnectionSessionByStreamId(const int32_t streamId); 106 bool FindExistingSession(const PeerInfo& peerInfo, const PeerInfo& localInfo, int32_t& sessionId); 107 bool CheckStreamIsRegistered(int32_t sessionId); 108 bool CheckSessionPermission(); 109 }; 110 } // namespace DistributedCollab 111 } // namespace OHOS 112 #endif //OHOS_DISTRIBUTED_ABILITY_CONNECTION_MANAGER_H