diff --git a/services/implementation/include/dependency/softbus/softbus_connector.h b/services/implementation/include/dependency/softbus/softbus_connector.h index be6e0468b7c5ca4dd2ba25a8a2c4c6001c39856a..bb578be35ee7e5308fb5b4cc4a0d3b9515e06c46 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 90606a916a10fd09fe3239f4c3b031ef976a5b52..b5f98b6f3c3f0786720ebd721bf1744182c32234 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 75dfdec64fd6d69d66349e33d53d2b93ba2d74d8..ab9055662bcee453765942a468b96c06dbe5e624 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 573c677571df67fc10e416f0ad22e881f392e2ec..c8bcbeefeb9d39d385842ee21cb3741f7685ea91 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/device_manager_service.cpp b/services/service/src/device_manager_service.cpp index a1333d81ec29ac1a5c118fa35da13d51d9c72859..8767deb0c130eba67e0f1225830f66cc2a16eadc 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 d19720175201d5c7473be0b9fae6acf9684094c9..184f92262604c488c408aed5c48f2ebd5211bb15 100644 --- a/services/service/src/softbus/softbus_listener.cpp +++ b/services/service/src/softbus/softbus_listener.cpp @@ -145,8 +145,6 @@ 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()); DeviceManagerService::GetInstance().HandleDeviceStatusChange(DEVICE_STATE_ONLINE, deviceInfo); }