From 132f75da88364267879a6c8f5fcd9cea87be7678 Mon Sep 17 00:00:00 2001 From: wuqi0105 Date: Thu, 24 Aug 2023 14:01:07 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E5=BC=82=E5=B8=B8=E6=83=85=E5=86=B5?= =?UTF-8?q?=E4=B8=8B=E9=93=BE=E8=B7=AF=E6=96=AD=E5=BC=80=EF=BC=8C=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E9=87=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wuqi0105 --- .../include/dinput_source_manager_callback.h | 32 ++++++++++++++++++ services/source/sourcemanager/BUILD.gn | 2 ++ .../distributed_input_source_manager.h | 12 +++++++ .../src/distributed_input_source_manager.cpp | 33 +++++++++++++++++++ .../distributed_input_transport_base.h | 3 ++ .../src/distributed_input_transport_base.cpp | 13 ++++++++ 6 files changed, 95 insertions(+) create mode 100644 services/common/include/dinput_source_manager_callback.h diff --git a/services/common/include/dinput_source_manager_callback.h b/services/common/include/dinput_source_manager_callback.h new file mode 100644 index 0000000..b28e699 --- /dev/null +++ b/services/common/include/dinput_source_manager_callback.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2023 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef DISTRIBUTED_SOURCE_MANAGER_CALLBACK_H +#define DISTRIBUTED_SOURCE_MANAGER_CALLBACK_H + +#include + +namespace OHOS { +namespace DistributedHardware { +namespace DistributedInput { +class DistributedInputSrcMgrCallback { +public: + virtual void ResetSrcMgrResStatus() = 0; +}; +} // namespace DistributedInput +} // namespace DistributedHardware +} // namespace OHOS + +#endif // DISTRIBUTED_SOURCE_MANAGER_CALLBACK_H diff --git a/services/source/sourcemanager/BUILD.gn b/services/source/sourcemanager/BUILD.gn index 1ef4428..ae0609f 100644 --- a/services/source/sourcemanager/BUILD.gn +++ b/services/source/sourcemanager/BUILD.gn @@ -38,6 +38,7 @@ ohos_shared_library("libdinput_source") { "${fwk_interfaces_path}/include/ipc", "${distributedinput_path}/inputdevicehandler/include", "${distributedinput_path}/services/state/include", + "${distributedinput_path}/services/transportbase/include", ] sources = [ @@ -89,6 +90,7 @@ ohos_shared_library("libdinput_source") { deps = [ "${dfx_utils_path}:libdinput_dfx_utils", "${distributedinput_path}/services/state:libdinput_state", + "${distributedinput_path}/services/transportbase:libdinput_trans_base", "${innerkits_path}:libdinput_sdk", "${services_source_path}/inputinject:libdinput_inject", "${services_source_path}/transport:libdinput_source_trans", diff --git a/services/source/sourcemanager/include/distributed_input_source_manager.h b/services/source/sourcemanager/include/distributed_input_source_manager.h index d38ea60..eb60ca6 100644 --- a/services/source/sourcemanager/include/distributed_input_source_manager.h +++ b/services/source/sourcemanager/include/distributed_input_source_manager.h @@ -32,6 +32,7 @@ #include "constants_dinput.h" #include "dinput_context.h" +#include "dinput_source_manager_callback.h" #include "dinput_source_trans_callback.h" #include "distributed_input_node_manager.h" #include "distributed_input_source_event_handler.h" @@ -220,6 +221,15 @@ public: DistributedInputSourceManager *sourceManagerObj_; }; + class DInputSrcMgrListener : public DistributedInputSrcMgrCallback { + public: + explicit DInputSrcMgrListener(DistributedInputSourceManager *manager); + virtual ~DInputSrcMgrListener(); + void ResetSrcMgrResStatus() override; + private: + DistributedInputSourceManager *sourceManagerObj_; + }; + class DInputSourceManagerEventHandler : public AppExecFwk::EventHandler { public: DInputSourceManagerEventHandler(const std::shared_ptr &runner, @@ -333,6 +343,7 @@ public: void SetInputTypesMap(const std::string deviceId, uint32_t value); uint32_t GetInputTypesMap(const std::string deviceId); uint32_t GetAllInputTypesMap(); + void ClearResourcesStatus(); private: struct DInputClientRegistInfo { @@ -427,6 +438,7 @@ private: ServiceSourceRunningState serviceRunningState_ = ServiceSourceRunningState::STATE_NOT_START; DInputServerType isStartTrans_ = DInputServerType::NULL_SERVER_TYPE; std::shared_ptr statuslistener_; + std::shared_ptr srcMgrListener_; std::vector regCallbacks_; std::vector unregCallbacks_; diff --git a/services/source/sourcemanager/src/distributed_input_source_manager.cpp b/services/source/sourcemanager/src/distributed_input_source_manager.cpp index f682e5d..452ca1d 100644 --- a/services/source/sourcemanager/src/distributed_input_source_manager.cpp +++ b/services/source/sourcemanager/src/distributed_input_source_manager.cpp @@ -40,6 +40,7 @@ #include "distributed_input_inject.h" #include "distributed_input_source_proxy.h" #include "distributed_input_source_transport.h" +#include "distributed_input_transport_base.h" #include "hisysevent_util.h" #include "hidumper.h" #include "input_check_param.h" @@ -534,6 +535,28 @@ void DistributedInputSourceManager::DInputSourceListener::OnReceiveRelayStopType sourceManagerObj_->GetCallbackEventHandler()->SendEvent(msgEvent, 0, AppExecFwk::EventQueue::Priority::IMMEDIATE); } +DistributedInputSourceManager::DInputSrcMgrListener::DInputSrcMgrListener(DistributedInputSourceManager *manager) +{ + sourceManagerObj_ = manager; + DHLOGI("DInputSrcMgrListener init."); +} + +DistributedInputSourceManager::DInputSrcMgrListener::~DInputSrcMgrListener() +{ + sourceManagerObj_ = nullptr; + DHLOGI("DInputSrcMgrListener destory."); +} + +void DistributedInputSourceManager::DInputSrcMgrListener::ResetSrcMgrResStatus() +{ + DHLOGI("DInputSrcMgrListener ResetSrcMgrResStatus."); + if (sourceManagerObj_ == nullptr) { + DHLOGE("ResetSrcMgrResStatus sourceManagerObj is null."); + return; + } + sourceManagerObj_->ClearResourcesStatus(); +} + void DistributedInputSourceManager::OnStart() { if (serviceRunningState_ == ServiceSourceRunningState::STATE_RUNNING) { @@ -962,6 +985,9 @@ int32_t DistributedInputSourceManager::Init() statuslistener_ = std::make_shared(this); DistributedInputSourceTransport::GetInstance().RegisterSourceRespCallback(statuslistener_); + srcMgrListener_ = std::make_shared(this); + DistributedInputTransportBase::GetInstance().RegisterSourceManagerCallback(srcMgrListener_); + serviceRunningState_ = ServiceSourceRunningState::STATE_RUNNING; std::shared_ptr dhFwkKit = DInputContext::GetInstance().GetDHFwkKit(); @@ -2527,6 +2553,13 @@ uint32_t DistributedInputSourceManager::GetAllInputTypesMap() return rInputTypes; } +void DistributedInputSourceManager::ClearResourcesStatus() +{ + std::lock_guard lock(mutex_); + relayPreCallbacks_.clear(); + relayUnpreCallbacks_.clear(); +} + void DistributedInputSourceManager::SetInputTypesMap(const std::string deviceId, uint32_t value) { if (value == static_cast(DInputDeviceType::NONE)) { diff --git a/services/transportbase/include/distributed_input_transport_base.h b/services/transportbase/include/distributed_input_transport_base.h index e6eebfc..b10bbcc 100644 --- a/services/transportbase/include/distributed_input_transport_base.h +++ b/services/transportbase/include/distributed_input_transport_base.h @@ -30,6 +30,7 @@ #include "nlohmann/json.hpp" #include "securec.h" +#include "dinput_source_manager_callback.h" #include "dinput_transbase_source_callback.h" #include "dinput_transbase_sink_callback.h" @@ -48,6 +49,7 @@ public: void RegisterSrcHandleSessionCallback(std::shared_ptr callback); void RegisterSinkHandleSessionCallback(std::shared_ptr callback); + void RegisterSourceManagerCallback(std::shared_ptr callback); int32_t OnSessionOpened(int32_t sessionId, int32_t result); void OnSessionClosed(int32_t sessionId); @@ -79,6 +81,7 @@ private: std::shared_ptr srcCallback_; std::shared_ptr sinkCallback_; + std::shared_ptr srcMgrCallback_; }; } // namespace DistributedInput diff --git a/services/transportbase/src/distributed_input_transport_base.cpp b/services/transportbase/src/distributed_input_transport_base.cpp index bd29f77..24c63bc 100644 --- a/services/transportbase/src/distributed_input_transport_base.cpp +++ b/services/transportbase/src/distributed_input_transport_base.cpp @@ -277,6 +277,13 @@ void DistributedInputTransportBase::RegisterSinkHandleSessionCallback( sinkCallback_ = callback; } +void DistributedInputTransportBase::RegisterSourceManagerCallback( + std::shared_ptr callback) +{ + DHLOGI("RegisterSourceManagerCallback"); + srcMgrCallback_ = callback; +} + int32_t DistributedInputTransportBase::CountSession(const std::string &remoteDevId) { return remoteDevSessionMap_.count(remoteDevId); @@ -372,6 +379,12 @@ void DistributedInputTransportBase::OnSessionClosed(int32_t sessionId) return; } srcCallback_->NotifySessionClosed(); + + if (srcMgrCallback_ == nullptr) { + DHLOGE("srcMgrCallback is nullptr."); + return; + } + srcMgrCallback_->ResetSrcMgrResStatus(); } } -- Gitee From e04b0b4bd7c9c3a33a8e32ee45f4f80e2cb388f3 Mon Sep 17 00:00:00 2001 From: wuqi0105 Date: Thu, 24 Aug 2023 14:30:03 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=BC=82=E5=B8=B8=E6=83=85=E5=86=B5?= =?UTF-8?q?=E4=B8=8B=E9=93=BE=E8=B7=AF=E6=96=AD=E5=BC=80=EF=BC=8C=E8=B5=84?= =?UTF-8?q?=E6=BA=90=E9=87=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: wuqi0105 --- services/common/include/dinput_source_manager_callback.h | 2 +- .../sourcemanager/include/distributed_input_source_manager.h | 2 +- .../transportbase/include/distributed_input_transport_base.h | 4 ++-- .../transportbase/src/distributed_input_transport_base.cpp | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/services/common/include/dinput_source_manager_callback.h b/services/common/include/dinput_source_manager_callback.h index b28e699..feb89e4 100644 --- a/services/common/include/dinput_source_manager_callback.h +++ b/services/common/include/dinput_source_manager_callback.h @@ -21,7 +21,7 @@ namespace OHOS { namespace DistributedHardware { namespace DistributedInput { -class DistributedInputSrcMgrCallback { +class DInputSourceManagerCallback { public: virtual void ResetSrcMgrResStatus() = 0; }; diff --git a/services/source/sourcemanager/include/distributed_input_source_manager.h b/services/source/sourcemanager/include/distributed_input_source_manager.h index eb60ca6..a888add 100644 --- a/services/source/sourcemanager/include/distributed_input_source_manager.h +++ b/services/source/sourcemanager/include/distributed_input_source_manager.h @@ -221,7 +221,7 @@ public: DistributedInputSourceManager *sourceManagerObj_; }; - class DInputSrcMgrListener : public DistributedInputSrcMgrCallback { + class DInputSrcMgrListener : public DInputSourceManagerCallback { public: explicit DInputSrcMgrListener(DistributedInputSourceManager *manager); virtual ~DInputSrcMgrListener(); diff --git a/services/transportbase/include/distributed_input_transport_base.h b/services/transportbase/include/distributed_input_transport_base.h index b10bbcc..4f560d6 100644 --- a/services/transportbase/include/distributed_input_transport_base.h +++ b/services/transportbase/include/distributed_input_transport_base.h @@ -49,7 +49,7 @@ public: void RegisterSrcHandleSessionCallback(std::shared_ptr callback); void RegisterSinkHandleSessionCallback(std::shared_ptr callback); - void RegisterSourceManagerCallback(std::shared_ptr callback); + void RegisterSourceManagerCallback(std::shared_ptr callback); int32_t OnSessionOpened(int32_t sessionId, int32_t result); void OnSessionClosed(int32_t sessionId); @@ -81,7 +81,7 @@ private: std::shared_ptr srcCallback_; std::shared_ptr sinkCallback_; - std::shared_ptr srcMgrCallback_; + std::shared_ptr srcMgrCallback_; }; } // namespace DistributedInput diff --git a/services/transportbase/src/distributed_input_transport_base.cpp b/services/transportbase/src/distributed_input_transport_base.cpp index 24c63bc..db55e96 100644 --- a/services/transportbase/src/distributed_input_transport_base.cpp +++ b/services/transportbase/src/distributed_input_transport_base.cpp @@ -278,7 +278,7 @@ void DistributedInputTransportBase::RegisterSinkHandleSessionCallback( } void DistributedInputTransportBase::RegisterSourceManagerCallback( - std::shared_ptr callback) + std::shared_ptr callback) { DHLOGI("RegisterSourceManagerCallback"); srcMgrCallback_ = callback; -- Gitee