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