From 05fdbb20efb76c979dc2817fed7bc483f44cc764 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=B7=8D?= Date: Thu, 31 Jul 2025 19:49:52 +0800 Subject: [PATCH 1/2] =?UTF-8?q?online,offline,onchange=E4=BA=92=E9=94=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 李巍 --- services/service/src/device_manager_service.cpp | 5 +---- services/service/src/softbus/softbus_listener.cpp | 12 ++++-------- 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/services/service/src/device_manager_service.cpp b/services/service/src/device_manager_service.cpp index a1333d81e..8767deb0c 100644 --- a/services/service/src/device_manager_service.cpp +++ b/services/service/src/device_manager_service.cpp @@ -1128,13 +1128,10 @@ int32_t DeviceManagerService::SetUserOperation(std::string &pkgName, int32_t act void DeviceManagerService::HandleDeviceStatusChange(DmDeviceState devState, DmDeviceInfo &devInfo) { - LOGD("start, devState = %{public}d", devState); + LOGI("start, devState = %{public}d", devState); if (IsDMServiceImplReady()) { dmServiceImpl_->HandleDeviceStatusChange(devState, devInfo); } - if (IsDMServiceAdapterResidentLoad()) { - dmServiceImplExtResident_->HandleDeviceStatusChange(devState, devInfo); - } } int DeviceManagerService::OnSessionOpened(int sessionId, int result) diff --git a/services/service/src/softbus/softbus_listener.cpp b/services/service/src/softbus/softbus_listener.cpp index d19720175..ccca02b47 100644 --- a/services/service/src/softbus/softbus_listener.cpp +++ b/services/service/src/softbus/softbus_listener.cpp @@ -73,12 +73,10 @@ static std::mutex g_radarLoadLock; static std::mutex g_onlineDeviceNumLock; static std::mutex g_lockDeviceTrustedChange; static std::mutex g_lockUserIdCheckSumChange; -static std::mutex g_lockDeviceOnLine; -static std::mutex g_lockDeviceOffLine; -static std::mutex g_lockDevInfoChange; static std::mutex g_lockDeviceIdSet; static std::mutex g_lockDevScreenStatusChange; static std::mutex g_credentialAuthStatus; +static std::mutex g_lockDeviceStateChange; static std::map>>> discoveredDeviceMap; static std::map> lnnOpsCbkMap; @@ -144,21 +142,19 @@ static IRefreshCallback softbusRefreshCallback_ = { void SoftbusListener::DeviceOnLine(DmDeviceInfo deviceInfo) { - std::lock_guard lock(g_lockDeviceOnLine); - LOGI("received device online deviceId: %{public}s, networkId: %{public}s.", - GetAnonyString(deviceInfo.deviceId).c_str(), GetAnonyString(deviceInfo.networkId).c_str()); + std::lock_guard lock(g_lockDeviceStateChange); DeviceManagerService::GetInstance().HandleDeviceStatusChange(DEVICE_STATE_ONLINE, deviceInfo); } void SoftbusListener::DeviceOffLine(DmDeviceInfo deviceInfo) { - std::lock_guard lock(g_lockDeviceOffLine); + std::lock_guard lock(g_lockDeviceStateChange); DeviceManagerService::GetInstance().HandleDeviceStatusChange(DEVICE_STATE_OFFLINE, deviceInfo); } void SoftbusListener::DeviceNameChange(DmDeviceInfo deviceInfo) { - std::lock_guard lock(g_lockDevInfoChange); + std::lock_guard lock(g_lockDeviceStateChange); DeviceManagerService::GetInstance().HandleDeviceStatusChange(DEVICE_INFO_CHANGED, deviceInfo); } -- Gitee From 678baf258adbf36e08047e70ceb659d6e25b9b46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E5=B7=8D?= Date: Fri, 1 Aug 2025 14:47:29 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=88=86=E5=BC=80=E4=B8=8A=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 李巍 --- .../dependency/softbus/softbus_connector.h | 12 ++++ .../dependency/softbus/softbus_connector.cpp | 60 +++++++++++++++++++ .../src/device_manager_service_impl.cpp | 20 +++---- .../devicestate/dm_device_state_manager.cpp | 12 ++-- .../service/src/softbus/softbus_listener.cpp | 10 ++-- 5 files changed, 96 insertions(+), 18 deletions(-) diff --git a/services/implementation/include/dependency/softbus/softbus_connector.h b/services/implementation/include/dependency/softbus/softbus_connector.h index be6e0468b..bb578be35 100644 --- a/services/implementation/include/dependency/softbus/softbus_connector.h +++ b/services/implementation/include/dependency/softbus/softbus_connector.h @@ -138,6 +138,14 @@ public: void SetChangeProcessInfo(ProcessInfo processInfo); std::vector GetChangeProcessInfo(); void ClearChangeProcessInfo(); + void SetOnlineProcessInfo(ProcessInfo processInfo); + void SetOnlineProcessInfoVec(std::vector processInfoVec); + std::vector GetOnlineProcessInfo(); + void ClearOnlineProcessInfo(); + void SetOfflineProcessInfo(ProcessInfo processInfo); + void SetOfflineProcessInfoVec(std::vector processInfoVec); + std::vector GetOfflineProcessInfo(); + void ClearOfflineProcessInfo(); DmDeviceInfo GetDeviceInfoByDeviceId(const std::string &deviceId); void DeleteOffLineTimer(std::string &udidHash); void SyncAclList(int32_t userId, std::string credId, int32_t sessionKeyId, int32_t aclId); @@ -172,10 +180,14 @@ private: static std::unordered_map deviceUdidMap_; static std::vector processInfoVec_; static std::vector processChangeInfoVec_; + static std::vector onlineProcessInfoVec_; + static std::vector offlineProcessInfoVec_; static std::mutex discoveryDeviceInfoMutex_; static std::mutex deviceUdidLocks_; static std::mutex processInfoVecMutex_; static std::mutex processChangeInfoVecMutex_; + static std::mutex onlineProcessInfoVecMutex_; + static std::mutex offlineProcessInfoVecMutex_; static std::shared_ptr connectorCallback_; }; } // namespace DistributedHardware diff --git a/services/implementation/src/dependency/softbus/softbus_connector.cpp b/services/implementation/src/dependency/softbus/softbus_connector.cpp index 90606a916..b5f98b6f3 100644 --- a/services/implementation/src/dependency/softbus/softbus_connector.cpp +++ b/services/implementation/src/dependency/softbus/softbus_connector.cpp @@ -55,10 +55,14 @@ std::map> SoftbusConnector::discoveryDe std::unordered_map SoftbusConnector::deviceUdidMap_ = {}; std::vector SoftbusConnector::processInfoVec_ = {}; std::vector SoftbusConnector::processChangeInfoVec_ = {}; +std::vector SoftbusConnector::onlineProcessInfoVec_ = {}; +std::vector SoftbusConnector::offlineProcessInfoVec_ = {}; std::mutex SoftbusConnector::discoveryDeviceInfoMutex_; std::mutex SoftbusConnector::deviceUdidLocks_; std::mutex SoftbusConnector::processInfoVecMutex_; std::mutex SoftbusConnector::processChangeInfoVecMutex_; +std::mutex SoftbusConnector::onlineProcessInfoVecMutex_; +std::mutex SoftbusConnector::offlineProcessInfoVecMutex_; std::shared_ptr SoftbusConnector::connectorCallback_ = nullptr; SoftbusConnector::SoftbusConnector() @@ -719,6 +723,62 @@ void SoftbusConnector::ClearChangeProcessInfo() processChangeInfoVec_.clear(); } +void SoftbusConnector::SetOnlineProcessInfo(ProcessInfo processInfo) +{ + LOGI("start"); + std::lock_guard lock(onlineProcessInfoVecMutex_); + onlineProcessInfoVec_.push_back(processInfo); +} + +void SoftbusConnector::SetOnlineProcessInfoVec(std::vector processInfoVec) +{ + LOGI("start"); + std::lock_guard lock(onlineProcessInfoVecMutex_); + onlineProcessInfoVec_ = processInfoVec; +} + +std::vector SoftbusConnector::GetOnlineProcessInfo() +{ + LOGI("start"); + std::lock_guard lock(onlineProcessInfoVecMutex_); + return onlineProcessInfoVec_; +} + +void SoftbusConnector::ClearOnlineProcessInfo() +{ + LOGI("start"); + std::lock_guard lock(onlineProcessInfoVecMutex_); + onlineProcessInfoVec_.clear(); +} + +void SoftbusConnector::SetOfflineProcessInfo(ProcessInfo processInfo) +{ + LOGI("start"); + std::lock_guard lock(offlineProcessInfoVecMutex_); + offlineProcessInfoVec_.push_back(processInfo); +} + +void SoftbusConnector::SetOfflineProcessInfoVec(std::vector processInfoVec) +{ + LOGI("start"); + std::lock_guard lock(offlineProcessInfoVecMutex_); + offlineProcessInfoVec_ = processInfoVec; +} + +std::vector SoftbusConnector::GetOfflineProcessInfo() +{ + LOGI("start"); + std::lock_guard lock(offlineProcessInfoVecMutex_); + return offlineProcessInfoVec_; +} + +void SoftbusConnector::ClearOfflineProcessInfo() +{ + LOGI("start"); + std::lock_guard lock(offlineProcessInfoVecMutex_); + offlineProcessInfoVec_.clear(); +} + void SoftbusConnector::HandleDeviceOnline(std::string deviceId, int32_t authForm) { LOGI("start"); diff --git a/services/implementation/src/device_manager_service_impl.cpp b/services/implementation/src/device_manager_service_impl.cpp index 75dfdec64..ab9055662 100644 --- a/services/implementation/src/device_manager_service_impl.cpp +++ b/services/implementation/src/device_manager_service_impl.cpp @@ -682,24 +682,24 @@ void DeviceManagerServiceImpl::HandleOffline(DmDeviceState devState, DmDeviceInf LOGI("The offline device is identical account bind type."); devInfo.authForm = DmAuthForm::IDENTICAL_ACCOUNT; processInfo.userId = item.first; - softbusConnector_->SetProcessInfo(processInfo); + softbusConnector_->SetOfflineProcessInfo(processInfo); } else if (static_cast(item.second) == USER && bindType == SHARE_TYPE) { LOGI("The offline device is device bind level and share bind type."); devInfo.authForm = DmAuthForm::SHARE; processInfo.userId = item.first; - softbusConnector_->SetProcessInfo(processInfo); + softbusConnector_->SetOfflineProcessInfo(processInfo); } else if (static_cast(item.second) == USER && bindType != SHARE_TYPE) { LOGI("The offline device is device bind type."); devInfo.authForm = DmAuthForm::PEER_TO_PEER; processInfo.userId = item.first; - softbusConnector_->SetProcessInfo(processInfo); + softbusConnector_->SetOfflineProcessInfo(processInfo); } else if (static_cast(item.second) == SERVICE || static_cast(item.second) == APP) { LOGI("The offline device is PEER_TO_PEER_TYPE bind type, %{public}" PRIu32, item.second); auto processInfoVec = DeviceProfileConnector::GetInstance().GetProcessInfoFromAclByUserId( requestDeviceId, trustDeviceId, item.first); std::set processInfoSet(processInfoVec.begin(), processInfoVec.end()); processInfoVec.assign(processInfoSet.begin(), processInfoSet.end()); - softbusConnector_->SetProcessInfoVec(processInfoVec); + softbusConnector_->SetOfflineProcessInfoVec(processInfoVec); } deviceStateMgr_->HandleDeviceStatusChange(devState, devInfo); } @@ -734,20 +734,20 @@ void DeviceManagerServiceImpl::SetOnlineProcessInfo(const uint32_t &bindType, Pr { if (bindType == IDENTICAL_ACCOUNT_TYPE) { devInfo.authForm = DmAuthForm::IDENTICAL_ACCOUNT; - softbusConnector_->SetProcessInfo(processInfo); + softbusConnector_->SetOnlineProcessInfo(processInfo); } else if (bindType == DEVICE_PEER_TO_PEER_TYPE) { devInfo.authForm = DmAuthForm::PEER_TO_PEER; - softbusConnector_->SetProcessInfo(processInfo); + softbusConnector_->SetOnlineProcessInfo(processInfo); } else if (bindType == DEVICE_ACROSS_ACCOUNT_TYPE) { devInfo.authForm = DmAuthForm::ACROSS_ACCOUNT; - softbusConnector_->SetProcessInfo(processInfo); + softbusConnector_->SetOnlineProcessInfo(processInfo); } else if (bindType == APP_PEER_TO_PEER_TYPE || bindType == SERVICE_PEER_TO_PEER_TYPE) { std::vector processInfoVec = DeviceProfileConnector::GetInstance().GetProcessInfoFromAclByUserId(requestDeviceId, trustDeviceId, MultipleUserConnector::GetFirstForegroundUserId()); std::set processInfoSet(processInfoVec.begin(), processInfoVec.end()); processInfoVec.assign(processInfoSet.begin(), processInfoSet.end()); - softbusConnector_->SetProcessInfoVec(processInfoVec); + softbusConnector_->SetOnlineProcessInfoVec(processInfoVec); devInfo.authForm = DmAuthForm::PEER_TO_PEER; } else if (bindType == APP_ACROSS_ACCOUNT_TYPE || bindType == SERVICE_ACROSS_ACCOUNT_TYPE) { std::vector processInfoVec = @@ -755,7 +755,7 @@ void DeviceManagerServiceImpl::SetOnlineProcessInfo(const uint32_t &bindType, Pr MultipleUserConnector::GetFirstForegroundUserId()); std::set processInfoSet(processInfoVec.begin(), processInfoVec.end()); processInfoVec.assign(processInfoSet.begin(), processInfoSet.end()); - softbusConnector_->SetProcessInfoVec(processInfoVec); + softbusConnector_->SetOnlineProcessInfoVec(processInfoVec); devInfo.authForm = DmAuthForm::ACROSS_ACCOUNT; } else if (bindType == SHARE_TYPE) { if (CheckSharePeerSrc(trustDeviceId, requestDeviceId)) { @@ -763,7 +763,7 @@ void DeviceManagerServiceImpl::SetOnlineProcessInfo(const uint32_t &bindType, Pr return; } devInfo.authForm = DmAuthForm::SHARE; - softbusConnector_->SetProcessInfo(processInfo); + softbusConnector_->SetOnlineProcessInfo(processInfo); } LOGI("HandleOnline success devInfo authForm is %{public}d.", devInfo.authForm); deviceStateMgr_->HandleDeviceStatusChange(devState, devInfo); diff --git a/services/implementation/src/devicestate/dm_device_state_manager.cpp b/services/implementation/src/devicestate/dm_device_state_manager.cpp index 573c67757..c8bcbeefe 100644 --- a/services/implementation/src/devicestate/dm_device_state_manager.cpp +++ b/services/implementation/src/devicestate/dm_device_state_manager.cpp @@ -145,7 +145,7 @@ void DmDeviceStateManager::HandleDeviceStatusChange(DmDeviceState devState, DmDe SaveOnlineDeviceInfo(devInfo); DmDistributedHardwareLoad::GetInstance().LoadDistributedHardwareFwk(); ProcessDeviceStateChange(devState, devInfo); - softbusConnector_->ClearProcessInfo(); + softbusConnector_->ClearOnlineProcessInfo(); break; case DEVICE_STATE_OFFLINE: StartOffLineTimer(devInfo); @@ -156,7 +156,7 @@ void DmDeviceStateManager::HandleDeviceStatusChange(DmDeviceState devState, DmDe softbusConnector_->EraseUdidFromMap(udid); } ProcessDeviceStateChange(devState, devInfo); - softbusConnector_->ClearProcessInfo(); + softbusConnector_->ClearOfflineProcessInfo(); break; case DEVICE_INFO_CHANGED: ChangeDeviceInfo(devInfo); @@ -178,8 +178,12 @@ void DmDeviceStateManager::ProcessDeviceStateChange(const DmDeviceState devState std::vector processInfoVec; if (devState == DEVICE_INFO_CHANGED) { processInfoVec = softbusConnector_->GetChangeProcessInfo(); - } else { - processInfoVec = softbusConnector_->GetProcessInfo(); + } + if (devState == DEVICE_STATE_ONLINE) { + processInfoVec = softbusConnector_->GetOnlineProcessInfo(); + } + if (devState == DEVICE_STATE_OFFLINE) { + processInfoVec = softbusConnector_->GetOfflineProcessInfo() } for (const auto &item : processInfoVec) { if (!item.pkgName.empty()) { diff --git a/services/service/src/softbus/softbus_listener.cpp b/services/service/src/softbus/softbus_listener.cpp index ccca02b47..184f92262 100644 --- a/services/service/src/softbus/softbus_listener.cpp +++ b/services/service/src/softbus/softbus_listener.cpp @@ -73,10 +73,12 @@ static std::mutex g_radarLoadLock; static std::mutex g_onlineDeviceNumLock; static std::mutex g_lockDeviceTrustedChange; static std::mutex g_lockUserIdCheckSumChange; +static std::mutex g_lockDeviceOnLine; +static std::mutex g_lockDeviceOffLine; +static std::mutex g_lockDevInfoChange; static std::mutex g_lockDeviceIdSet; static std::mutex g_lockDevScreenStatusChange; static std::mutex g_credentialAuthStatus; -static std::mutex g_lockDeviceStateChange; static std::map>>> discoveredDeviceMap; static std::map> lnnOpsCbkMap; @@ -142,19 +144,19 @@ static IRefreshCallback softbusRefreshCallback_ = { void SoftbusListener::DeviceOnLine(DmDeviceInfo deviceInfo) { - std::lock_guard lock(g_lockDeviceStateChange); + std::lock_guard lock(g_lockDeviceOnLine); DeviceManagerService::GetInstance().HandleDeviceStatusChange(DEVICE_STATE_ONLINE, deviceInfo); } void SoftbusListener::DeviceOffLine(DmDeviceInfo deviceInfo) { - std::lock_guard lock(g_lockDeviceStateChange); + std::lock_guard lock(g_lockDeviceOffLine); DeviceManagerService::GetInstance().HandleDeviceStatusChange(DEVICE_STATE_OFFLINE, deviceInfo); } void SoftbusListener::DeviceNameChange(DmDeviceInfo deviceInfo) { - std::lock_guard lock(g_lockDeviceStateChange); + std::lock_guard lock(g_lockDevInfoChange); DeviceManagerService::GetInstance().HandleDeviceStatusChange(DEVICE_INFO_CHANGED, deviceInfo); } -- Gitee