diff --git a/services/distributeddataservice/adapter/communicator/src/softbus_adapter.h b/services/distributeddataservice/adapter/communicator/src/softbus_adapter.h index bbc18955e5c227b9b0d4f9e14ca8687b82ad940d..141e271b2125af3960fbd08a18b9facc38efd33e 100755 --- a/services/distributeddataservice/adapter/communicator/src/softbus_adapter.h +++ b/services/distributeddataservice/adapter/communicator/src/softbus_adapter.h @@ -123,7 +123,7 @@ public: void NotifyDataListeners(const uint8_t *ptr, const int size, const std::string &deviceId, const PipeInfo &pipeInfo); - + int WaitSessionOpen(); void NotifySessionOpen(const int &state); @@ -132,7 +132,8 @@ public: void SetOpenSessionId(const int &sessionId); private: - std::map> networkId2UuidUdid_ {}; + mutable std::mutex networkMutex_ {}; + mutable std::map> networkId2UuidUdid_ {}; DeviceInfo localInfo_ {}; static std::shared_ptr instance_; std::mutex deviceChangeMutex_; diff --git a/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp b/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp index 1fd2e3f42d23b6b40858c038dd85fc7ab5ad6a2a..5901b8cfc209a8f636d3e2ccbd4e8079142c5a7f 100755 --- a/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp +++ b/services/distributeddataservice/adapter/communicator/src/softbus_adapter_standard.cpp @@ -354,6 +354,7 @@ void SoftBusAdapter::UpdateRelationship(const std::string &networkid, const Devi { auto uuid = GetUuidByNodeId(networkid); auto udid = GetUdidByNodeId(networkid); + lock_guard lock(networkMutex_); switch (type) { case DeviceChangeType::DEVICE_OFFLINE: { auto size = this->networkId2UuidUdid_.erase(networkid); @@ -379,6 +380,7 @@ void SoftBusAdapter::UpdateRelationship(const std::string &networkid, const Devi std::string SoftBusAdapter::ToUUID(const std::string& id) const { + lock_guard lock(networkMutex_); auto res = networkId2UuidUdid_.find(id); if (res != networkId2UuidUdid_.end()) { // id is networkid return std::get<0>(res->second); @@ -399,16 +401,43 @@ std::string SoftBusAdapter::ToUUID(const std::string& id) const std::string SoftBusAdapter::ToNodeID(const std::string& id, const std::string &nodeId) const { - for (auto const &e : networkId2UuidUdid_) { - auto tup = e.second; - if (nodeId == (std::get<0>(tup))) { // id is uuid - return e.first; + { + lock_guard lock(networkMutex_); + for (auto const &e : networkId2UuidUdid_) { + auto tup = e.second; + if (nodeId == (std::get<0>(tup))) { // id is uuid + return e.first; + } + if (id == (std::get<1>(tup))) { // id is udid + return e.first; + } } - if (id == (std::get<1>(tup))) { // id is udid - return e.first; + } + + ZLOGW("get the network id from devices."); + std::vector devices; + NodeBasicInfo *info = nullptr; + int32_t infoNum = 0; + std::string networkId; + int32_t ret = GetAllNodeDeviceInfo("ohos.distributeddata", &info, &infoNum); + if (ret == SOFTBUS_OK) { + lock_guard lock(networkMutex_); + for (int i = 0; i < infoNum; i++) { + if (networkId2UuidUdid_.find(info[i].networkId) != networkId2UuidUdid_.end()) { + continue; + } + auto uuid = GetUuidByNodeId(std::string(info[i].networkId)); + auto udid = GetUdidByNodeId(std::string(info[i].networkId)); + networkId2UuidUdid_.insert({info[i].networkId, {uuid, udid}}); + if (uuid == nodeId || udid == nodeId) { + networkId = info[i].networkId; + } } } - return ""; + if (info != NULL) { + FreeNodeInfo(info); + } + return networkId; } std::string SoftBusAdapter::ToBeAnonymous(const std::string &name)