1 /* 2 * Copyright (c) 2023 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 DSOFTBUS_HANDLER_H 17 #define DSOFTBUS_HANDLER_H 18 19 #include "nocopyable.h" 20 21 #include "channel.h" 22 #include "cooperate_events.h" 23 #include "i_context.h" 24 25 namespace OHOS { 26 namespace Msdp { 27 namespace DeviceStatus { 28 namespace Cooperate { 29 class DSoftbusHandler final { 30 class DSoftbusObserver final : public IDSoftbusObserver { 31 public: DSoftbusObserver(DSoftbusHandler & parent)32 DSoftbusObserver(DSoftbusHandler &parent) : parent_(parent) {} 33 ~DSoftbusObserver() = default; 34 OnBind(const std::string & networkId)35 void OnBind(const std::string &networkId) override 36 { 37 parent_.OnBind(networkId); 38 } 39 OnShutdown(const std::string & networkId)40 void OnShutdown(const std::string &networkId) override 41 { 42 parent_.OnShutdown(networkId); 43 } 44 OnConnected(const std::string & networkId)45 void OnConnected(const std::string &networkId) override 46 { 47 parent_.OnConnected(networkId); 48 } 49 OnPacket(const std::string & networkId,NetPacket & packet)50 bool OnPacket(const std::string &networkId, NetPacket &packet) override 51 { 52 return parent_.OnPacket(networkId, packet); 53 } 54 OnRawData(const std::string & networkId,const void * data,uint32_t dataLen)55 bool OnRawData(const std::string &networkId, const void *data, uint32_t dataLen) override 56 { 57 return false; 58 } 59 60 private: 61 DSoftbusHandler &parent_; 62 }; 63 64 public: 65 DSoftbusHandler(IContext *env); 66 ~DSoftbusHandler(); 67 DISALLOW_COPY_AND_MOVE(DSoftbusHandler); 68 69 void AttachSender(Channel<CooperateEvent>::Sender sender); 70 int32_t OpenSession(const std::string &networkId); 71 void CloseSession(const std::string &networkId); 72 void CloseAllSessions(); 73 74 int32_t StartCooperate(const std::string &networkId, const DSoftbusStartCooperate &event); 75 int32_t StopCooperate(const std::string &networkId, const DSoftbusStopCooperate &event); 76 int32_t ComeBack(const std::string &networkId, const DSoftbusComeBack &event); 77 int32_t RelayCooperate(const std::string &networkId, const DSoftbusRelayCooperate &event); 78 int32_t RelayCooperateFinish(const std::string &networkId, const DSoftbusRelayCooperateFinished &event); 79 static std::string GetLocalNetworkId(); 80 81 private: 82 void OnBind(const std::string &networkId); 83 void OnShutdown(const std::string &networkId); 84 void OnConnected(const std::string &networkId); 85 bool OnPacket(const std::string &networkId, NetPacket &packet); 86 void SendEvent(const CooperateEvent &event); 87 void OnCommunicationFailure(const std::string &networkId); 88 void OnStartCooperate(const std::string &networkId, NetPacket &packet); 89 void OnStopCooperate(const std::string &networkId, NetPacket &packet); 90 void OnComeBack(const std::string &networkId, NetPacket &packet); 91 void OnRelayCooperate(const std::string &networkId, NetPacket &packet); 92 void OnRelayCooperateFinish(const std::string &networkId, NetPacket &packet); 93 void OnSubscribeMouseLocation(const std::string& networKId, NetPacket &packet); 94 void OnUnSubscribeMouseLocation(const std::string& networKId, NetPacket &packet); 95 void OnReplySubscribeLocation(const std::string& networKId, NetPacket &packet); 96 void OnReplyUnSubscribeLocation(const std::string& networKId, NetPacket &packet); 97 void OnRemoteMouseLocation(const std::string& networKId, NetPacket &packet); 98 void OnRemoteInputDevice(const std::string& networKId, NetPacket &packet); 99 void OnRemoteHotPlug(const std::string& networKId, NetPacket &packet); 100 int32_t DeserializeDevice(std::shared_ptr<IDevice> device, NetPacket &packet); 101 102 IContext *env_ { nullptr }; 103 std::mutex lock_; 104 Channel<CooperateEvent>::Sender sender_; 105 std::shared_ptr<DSoftbusObserver> observer_; 106 std::map<int32_t, std::function<void(const std::string &networkId, NetPacket &packet)>> handles_; 107 }; 108 } // namespace Cooperate 109 } // namespace DeviceStatus 110 } // namespace Msdp 111 } // namespace OHOS 112 #endif // DSOFTBUS_HANDLER_H 113