From 1ffbc9954b9596246d8b596b09e8483a685c8823 Mon Sep 17 00:00:00 2001 From: wuqi0105 Date: Thu, 7 Sep 2023 11:27:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=86=E5=B8=83=E5=BC=8F=E8=BE=93=E5=85=A5?= =?UTF-8?q?=E5=9C=A8DistributedInputSinkManager=E6=A8=A1=E5=9D=97=E6=89=A7?= =?UTF-8?q?=E8=A1=8CStopRemoteInput=E6=97=B6=EF=BC=8C=E8=BD=AF=E6=80=BB?= =?UTF-8?q?=E7=BA=BF=E9=80=9A=E9=81=93=E5=BC=82=E5=B8=B8=E6=96=AD=E5=BC=80?= =?UTF-8?q?=EF=BC=8C=E8=B5=84=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_sink_manager_callback.h | 32 ++++++++++++++++++ services/sink/sinkmanager/BUILD.gn | 2 ++ .../include/distributed_input_sink_manager.h | 13 ++++++++ .../src/distributed_input_sink_manager.cpp | 33 +++++++++++++++++++ .../distributed_input_transport_base.h | 3 ++ .../src/distributed_input_transport_base.cpp | 13 ++++++++ 6 files changed, 96 insertions(+) create mode 100644 services/common/include/dinput_sink_manager_callback.h diff --git a/services/common/include/dinput_sink_manager_callback.h b/services/common/include/dinput_sink_manager_callback.h new file mode 100644 index 0000000..0d436cf --- /dev/null +++ b/services/common/include/dinput_sink_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_SINK_MANAGER_CALLBACK_H +#define DISTRIBUTED_SINK_MANAGER_CALLBACK_H + +#include + +namespace OHOS { +namespace DistributedHardware { +namespace DistributedInput { +class DInputSinkManagerCallback { +public: + virtual void ResetSinkMgrResStatus() = 0; +}; +} // namespace DistributedInput +} // namespace DistributedHardware +} // namespace OHOS + +#endif // DISTRIBUTED_SINK_MANAGER_CALLBACK_H diff --git a/services/sink/sinkmanager/BUILD.gn b/services/sink/sinkmanager/BUILD.gn index 7ba1f32..2a8aa04 100644 --- a/services/sink/sinkmanager/BUILD.gn +++ b/services/sink/sinkmanager/BUILD.gn @@ -36,6 +36,7 @@ ohos_shared_library("libdinput_sink") { "${fwk_interfaces_path}/include", "${fwk_interfaces_path}/include/ipc", "${distributedinput_path}/services/state/include", + "${distributedinput_path}/services/transportbase/include", ] sources = [ @@ -54,6 +55,7 @@ ohos_shared_library("libdinput_sink") { 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_sink_path}/inputcollector:libdinput_collector", "${services_sink_path}/transport:libdinput_sink_trans", diff --git a/services/sink/sinkmanager/include/distributed_input_sink_manager.h b/services/sink/sinkmanager/include/distributed_input_sink_manager.h index e1ca3d5..f51a6d7 100644 --- a/services/sink/sinkmanager/include/distributed_input_sink_manager.h +++ b/services/sink/sinkmanager/include/distributed_input_sink_manager.h @@ -34,6 +34,7 @@ #include "system_ability_status_change_stub.h" #include "constants_dinput.h" +#include "dinput_sink_manager_callback.h" #include "dinput_sink_trans_callback.h" #include "distributed_input_sink_stub.h" #include "distributed_input_sink_event_handler.h" @@ -53,6 +54,15 @@ public: DistributedInputSinkManager(int32_t saId, bool runOnCreate); ~DistributedInputSinkManager() override; + class DInputSinkMgrListener : public DInputSinkManagerCallback { + public: + explicit DInputSinkMgrListener(DistributedInputSinkManager *manager); + virtual ~DInputSinkMgrListener(); + void ResetSinkMgrResStatus() override; + private: + DistributedInputSinkManager *sinkManagerObj_; + }; + class DInputSinkListener : public DInputSinkTransCallback { public: explicit DInputSinkListener(DistributedInputSinkManager *manager); @@ -150,6 +160,8 @@ public: void QueryLocalWhiteList(nlohmann::json &jsonStr); + void ClearResourcesStatus(); + private: void CleanExceptionalInfo(const SrcScreenInfo &srcScreenInfo); void CallBackScreenInfoChange(); @@ -158,6 +170,7 @@ private: ServiceSinkRunningState serviceRunningState_ = ServiceSinkRunningState::STATE_NOT_START; DInputServerType isStartTrans_ = DInputServerType::NULL_SERVER_TYPE; std::shared_ptr statuslistener_; + std::shared_ptr sinkMgrListener_; std::set> getSinkScreenInfosCallbacks_; std::shared_ptr runner_; diff --git a/services/sink/sinkmanager/src/distributed_input_sink_manager.cpp b/services/sink/sinkmanager/src/distributed_input_sink_manager.cpp index afb209f..d8d51db 100644 --- a/services/sink/sinkmanager/src/distributed_input_sink_manager.cpp +++ b/services/sink/sinkmanager/src/distributed_input_sink_manager.cpp @@ -32,6 +32,7 @@ #include "distributed_input_collector.h" #include "distributed_input_sink_switch.h" #include "distributed_input_sink_transport.h" +#include "distributed_input_transport_base.h" #include "dinput_context.h" #include "dinput_errcode.h" @@ -59,6 +60,28 @@ DistributedInputSinkManager::~DistributedInputSinkManager() projectWindowListener_ = nullptr; } +DistributedInputSinkManager::DInputSinkMgrListener::DInputSinkMgrListener(DistributedInputSinkManager *manager) +{ + sinkManagerObj_ = manager; + DHLOGI("DInputSinkMgrListener init."); +} + +DistributedInputSinkManager::DInputSinkMgrListener::~DInputSinkMgrListener() +{ + sinkManagerObj_ = nullptr; + DHLOGI("DInputSinkMgrListener destory."); +} + +void DistributedInputSinkManager::DInputSinkMgrListener::ResetSinkMgrResStatus() +{ + DHLOGI("DInputSinkMgrListener ResetSinkMgrResStatus."); + if (sinkManagerObj_ == nullptr) { + DHLOGE("ResetSinkMgrResStatus sinkManagerObj is null."); + return; + } + sinkManagerObj_->ClearResourcesStatus(); +} + DistributedInputSinkManager::DInputSinkListener::DInputSinkListener(DistributedInputSinkManager *manager) { sinkManagerObj_ = manager; @@ -95,6 +118,13 @@ void DistributedInputSinkManager::QueryLocalWhiteList(nlohmann::json &jsonStr) jsonStr[DINPUT_SOFTBUS_KEY_WHITE_LIST] = object; } +void DistributedInputSinkManager::ClearResourcesStatus() +{ + std::lock_guard lock(mutex_); + sharingDhIdsMap_.clear(); + sharingDhIds_.clear(); +} + void DistributedInputSinkManager::DInputSinkListener::OnPrepareRemoteInput( const int32_t &sessionId, const std::string &deviceId) { @@ -612,6 +642,9 @@ int32_t DistributedInputSinkManager::Init() statuslistener_ = std::make_shared(this); DistributedInputSinkTransport::GetInstance().RegistSinkRespCallback(statuslistener_); + sinkMgrListener_ = std::make_shared(this); + DistributedInputTransportBase::GetInstance().RegisterSinkManagerCallback(sinkMgrListener_); + serviceRunningState_ = ServiceSinkRunningState::STATE_RUNNING; std::shared_ptr dhFwkKit = DInputContext::GetInstance().GetDHFwkKit(); diff --git a/services/transportbase/include/distributed_input_transport_base.h b/services/transportbase/include/distributed_input_transport_base.h index cfba4e7..ea7568d 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_sink_manager_callback.h" #include "dinput_source_manager_callback.h" #include "dinput_transbase_source_callback.h" #include "dinput_transbase_sink_callback.h" @@ -51,6 +52,7 @@ public: void RegisterSrcHandleSessionCallback(std::shared_ptr callback); void RegisterSinkHandleSessionCallback(std::shared_ptr callback); void RegisterSourceManagerCallback(std::shared_ptr callback); + void RegisterSinkManagerCallback(std::shared_ptr callback); void RegisterSessionStateCb(sptr callback); void UnregisterSessionStateCb(); int32_t OnSessionOpened(int32_t sessionId, int32_t result); @@ -85,6 +87,7 @@ private: std::shared_ptr srcCallback_; std::shared_ptr sinkCallback_; std::shared_ptr srcMgrCallback_; + std::shared_ptr sinkMgrCallback_; sptr SessionStateCallback_; }; diff --git a/services/transportbase/src/distributed_input_transport_base.cpp b/services/transportbase/src/distributed_input_transport_base.cpp index 49cf607..581e815 100644 --- a/services/transportbase/src/distributed_input_transport_base.cpp +++ b/services/transportbase/src/distributed_input_transport_base.cpp @@ -286,6 +286,13 @@ void DistributedInputTransportBase::RegisterSourceManagerCallback( srcMgrCallback_ = callback; } +void DistributedInputTransportBase::RegisterSinkManagerCallback( + std::shared_ptr callback) +{ + DHLOGI("RegisterSourceManagerCallback"); + sinkMgrCallback_ = callback; +} + void DistributedInputTransportBase::RegisterSessionStateCb(sptr callback) { DHLOGI("RegisterSessionStateCb"); @@ -411,6 +418,12 @@ void DistributedInputTransportBase::OnSessionClosed(int32_t sessionId) return; } srcMgrCallback_->ResetSrcMgrResStatus(); + + if (sinkMgrCallback_ == nullptr) { + DHLOGE("sinkMgrCallback is nullptr."); + return; + } + sinkMgrCallback_->ResetSinkMgrResStatus(); } } -- Gitee