166f3657fSopenharmony_ci/* 266f3657fSopenharmony_ci * Copyright (c) 2022-2024 Huawei Device Co., Ltd. 366f3657fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 466f3657fSopenharmony_ci * you may not use this file except in compliance with the License. 566f3657fSopenharmony_ci * You may obtain a copy of the License at 666f3657fSopenharmony_ci * 766f3657fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 866f3657fSopenharmony_ci * 966f3657fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1066f3657fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1166f3657fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1266f3657fSopenharmony_ci * See the License for the specific language governing permissions and 1366f3657fSopenharmony_ci * limitations under the License. 1466f3657fSopenharmony_ci */ 1566f3657fSopenharmony_ci 1666f3657fSopenharmony_ci#ifndef OHOS_SOFTBUS_ADAPTER 1766f3657fSopenharmony_ci#define OHOS_SOFTBUS_ADAPTER 1866f3657fSopenharmony_ci 1966f3657fSopenharmony_ci#include <mutex> 2066f3657fSopenharmony_ci#include <map> 2166f3657fSopenharmony_ci#include <set> 2266f3657fSopenharmony_ci 2366f3657fSopenharmony_ci#include "transport/socket.h" 2466f3657fSopenharmony_ci#include "transport/trans_type.h" 2566f3657fSopenharmony_ci#include "single_instance.h" 2666f3657fSopenharmony_ci 2766f3657fSopenharmony_ci#include "dscreen_constants.h" 2866f3657fSopenharmony_ci#include "dscreen_log.h" 2966f3657fSopenharmony_ci#include "isoftbus_listener.h" 3066f3657fSopenharmony_ci 3166f3657fSopenharmony_cinamespace OHOS { 3266f3657fSopenharmony_cinamespace DistributedHardware { 3366f3657fSopenharmony_citypedef struct { 3466f3657fSopenharmony_ci std::string sessionName; 3566f3657fSopenharmony_ci std::string peerDevId; 3666f3657fSopenharmony_ci} SessionInfo; 3766f3657fSopenharmony_ci 3866f3657fSopenharmony_ciclass SoftbusAdapter { 3966f3657fSopenharmony_ci DECLARE_SINGLE_INSTANCE_BASE(SoftbusAdapter); 4066f3657fSopenharmony_cipublic: 4166f3657fSopenharmony_ci int32_t CreateSoftbusSessionServer(const std::string &pkgname, const std::string &sessionName, 4266f3657fSopenharmony_ci const std::string &peerDevId); 4366f3657fSopenharmony_ci int32_t RemoveSoftbusSessionServer(const std::string &pkgname, const std::string &sessionName, 4466f3657fSopenharmony_ci const std::string &peerDevId); 4566f3657fSopenharmony_ci int32_t OpenSoftbusSession(const std::string &mySessionName, const std::string &peerSessionName, 4666f3657fSopenharmony_ci const std::string &peerDevId); 4766f3657fSopenharmony_ci int32_t CloseSoftbusSession(const int32_t sessionId); 4866f3657fSopenharmony_ci int32_t SendSoftbusBytes(int32_t sessionId, const void *data, int32_t dataLen) const; 4966f3657fSopenharmony_ci int32_t SendSoftbusStream(int32_t sessionId, const StreamData *data, const StreamData *ext, 5066f3657fSopenharmony_ci const StreamFrameInfo *param) const; 5166f3657fSopenharmony_ci int32_t RegisterSoftbusListener(const std::shared_ptr<ISoftbusListener> &listener, const std::string &sessionName, 5266f3657fSopenharmony_ci const std::string &peerDevId); 5366f3657fSopenharmony_ci int32_t UnRegisterSoftbusListener(const std::string &sessionName, const std::string &peerDevId); 5466f3657fSopenharmony_ci 5566f3657fSopenharmony_ci int32_t OnSoftbusSessionOpened(int32_t sessionId, PeerSocketInfo info); 5666f3657fSopenharmony_ci void OnSoftbusSessionClosed(int32_t sessionId, ShutdownReason reason); 5766f3657fSopenharmony_ci void OnBytesReceived(int32_t sessionId, const void *data, uint32_t dataLen); 5866f3657fSopenharmony_ci void OnStreamReceived(int32_t sessionId, const StreamData *data, const StreamData *ext, 5966f3657fSopenharmony_ci const StreamFrameInfo *frameInfo); 6066f3657fSopenharmony_ci void OnMessageReceived(int sessionId, const void *data, unsigned int dataLen) const; 6166f3657fSopenharmony_ci 6266f3657fSopenharmony_ciprivate: 6366f3657fSopenharmony_ci SoftbusAdapter(); 6466f3657fSopenharmony_ci ~SoftbusAdapter(); 6566f3657fSopenharmony_ci std::shared_ptr<ISoftbusListener> &GetSoftbusListenerByName(int32_t sessionId); 6666f3657fSopenharmony_ci std::shared_ptr<ISoftbusListener> &GetSoftbusListenerById(int32_t sessionId); 6766f3657fSopenharmony_ci 6866f3657fSopenharmony_ciprivate: 6966f3657fSopenharmony_ci static const constexpr char *DSCREEN_LOG_TAG = "SoftbusAdapter"; 7066f3657fSopenharmony_ci std::mutex listenerMtx_; 7166f3657fSopenharmony_ci std::mutex idMapMutex_; 7266f3657fSopenharmony_ci std::mutex serverIdMapMutex_; 7366f3657fSopenharmony_ci 7466f3657fSopenharmony_ci ISocketListener sessListener_; 7566f3657fSopenharmony_ci /* while can not find the listener in mapListeners_, return nullListener_ point to null ptr. */ 7666f3657fSopenharmony_ci std::map<int32_t, std::string> serverIdMap_; 7766f3657fSopenharmony_ci std::map<int32_t, std::string> devId2SessIdMap_; 7866f3657fSopenharmony_ci std::shared_ptr<ISoftbusListener> nullListener_; 7966f3657fSopenharmony_ci std::map<std::string, std::shared_ptr<ISoftbusListener>> mapListeners_; 8066f3657fSopenharmony_ci std::map<int32_t, std::shared_ptr<ISoftbusListener>> mapSessListeners_; 8166f3657fSopenharmony_ci}; 8266f3657fSopenharmony_ci} // namespace DistributedHardware 8366f3657fSopenharmony_ci} // namespace OHOS 8466f3657fSopenharmony_ci#endif