From 120dd75f9a3b9795d41a2ed694c6a98ee947ac5d Mon Sep 17 00:00:00 2001 From: l30054665 Date: Sun, 4 Feb 2024 18:01:54 +0800 Subject: [PATCH] change sa Signed-off-by: l30054665 --- interfaces/ipc/include/dinput_sa_manager.h | 6 +-- interfaces/ipc/src/dinput_sa_manager.cpp | 44 ++++++++++++---------- 2 files changed, 28 insertions(+), 22 deletions(-) diff --git a/interfaces/ipc/include/dinput_sa_manager.h b/interfaces/ipc/include/dinput_sa_manager.h index f2bbda6..6792393 100644 --- a/interfaces/ipc/include/dinput_sa_manager.h +++ b/interfaces/ipc/include/dinput_sa_manager.h @@ -50,7 +50,7 @@ public: int32_t RestoreRegisterListenerAndCallback(); void AddSimEventListenerToCache(sptr listener); void RemoveSimEventListenerFromCache(sptr listener); - void AddSessionStateCbToCache(const sptr callback); + void AddSessionStateCbToCache(sptr callback); void RemoveSessionStateCbFromCache(); public: @@ -64,8 +64,8 @@ private: std::mutex simEventListenerCacheMtx_; std::set> simEventListenerCache_; std::mutex sessionStateCbCacheMtx_; - sptr sessionStateCbCache_ = nullptr; - + std::set> sessionStateCbCache_; + private: DInputSAManager() = default; ~DInputSAManager() = default; diff --git a/interfaces/ipc/src/dinput_sa_manager.cpp b/interfaces/ipc/src/dinput_sa_manager.cpp index 4f8b49f..d2e7f12 100644 --- a/interfaces/ipc/src/dinput_sa_manager.cpp +++ b/interfaces/ipc/src/dinput_sa_manager.cpp @@ -285,30 +285,36 @@ int32_t DInputSAManager::RestoreRegisterListenerAndCallback() } int32_t result = DH_SUCCESS; - std::lock_guard lock(simEventListenerCacheMtx_); + { + std::lock_guard lock(simEventListenerCacheMtx_); for (const auto& listener : simEventListenerCache_) { + if (listener == nullptr) { + DHLOGE("simEventListenerCache_ is nullptr"); + return ERR_DH_INPUT_CLIENT_REGISTER_FAIL; + } int32_t ret = DInputSAManager::GetInstance().dInputSourceProxy_->RegisterSimulationEventListener(listener); if (ret != DH_SUCCESS) { result = ret; DHLOGE("SA execute RegisterSimulationEventListener fail, ret = %d", ret); } - } - - DHLOGI("Restore RegisterSessionStateCb"); - if (!DInputSAManager::GetInstance().GetDInputSourceProxy()) { - DHLOGE("Restore RegisterSessionStateCb client fail."); - return ERR_DH_INPUT_CLIENT_GET_SOURCE_PROXY_FAIL; - } - - { - std::lock_guard lock(sessionStateCbCacheMtx_); - int32_t ret = DInputSAManager::GetInstance().dInputSourceProxy_->RegisterSessionStateCb(sessionStateCbCache_); - if (ret != DH_SUCCESS) { - result = ret; - DHLOGE("SA execute RegisterSessionStateCb fail, ret = %d", ret); } - return result; } + { + DHLOGI("Restore RegisterSessionStateCb"); + std::lock_guard lock(sessionStateCbCacheMtx_); + for (const auto& callback : sessionStateCbCache_) { + if (callback == nullptr) { + DHLOGE("sessionStateCbCache_ is nullptr"); + return ERR_DH_INPUT_CLIENT_REGISTER_FAIL; + } + int32_t ret = DInputSAManager::GetInstance().dInputSourceProxy_->RegisterSessionStateCb(callback); + if (ret != DH_SUCCESS) { + result = ret; + DHLOGE("SA execute RegisterSessionStateCb fail, ret = %d", ret); + } + } + } + return result; } void DInputSAManager::AddSimEventListenerToCache(sptr listener) @@ -323,16 +329,16 @@ void DInputSAManager::RemoveSimEventListenerFromCache(sptr callback) +void DInputSAManager::AddSessionStateCbToCache(sptr callback) { std::lock_guard sessionStateCbLock(sessionStateCbCacheMtx_); - sessionStateCbCache_ = callback; + sessionStateCbCache_.insert(callback); } void DInputSAManager::RemoveSessionStateCbFromCache() { std::lock_guard sessionStateCbLock(sessionStateCbCacheMtx_); - sessionStateCbCache_ = nullptr; + sessionStateCbCache_.clear(); } } // namespace DistributedInput } // namespace DistributedHardware