@@ -382,14 +382,15 @@ std::vector<const ParticipantDiscoveryItem*> DiscoveryItemDatabase::FindParticip
382382
383383bool DiscoveryItemDatabase::AddParticipant (
384384 const GUID_t& spokesman,
385+ const std::string& srcName,
385386 const GUID_t& ptid,
386387 const std::string& name,
387388 const std::chrono::steady_clock::time_point& discovered_timestamp,
388389 bool server /* = false*/ )
389390{
390391 std::lock_guard<std::mutex> lock (database_mutex);
391392
392- ParticipantDiscoveryDatabase& _database = image[ spokesman] ;
393+ ParticipantDiscoveryDatabase& _database = image. access_snapshot ( spokesman, srcName) ;
393394 ParticipantDiscoveryDatabase::iterator it = std::lower_bound (_database.begin (), _database.end (), ptid);
394395
395396 if (it == _database.end () || *it != ptid)
@@ -455,6 +456,7 @@ template<class T>
455456bool DiscoveryItemDatabase::AddEndPoint (
456457 T& (ParticipantDiscoveryItem::* m)() const ,
457458 const GUID_t& spokesman,
459+ const std::string& srcName,
458460 const GUID_t& ptid,
459461 const GUID_t& id,
460462 const std::string& _typename,
@@ -463,7 +465,7 @@ bool DiscoveryItemDatabase::AddEndPoint(
463465{
464466 std::lock_guard<std::mutex> lock (database_mutex);
465467
466- ParticipantDiscoveryDatabase& _database = image[ spokesman] ;
468+ ParticipantDiscoveryDatabase& _database = image. access_snapshot ( spokesman, srcName) ;
467469 ParticipantDiscoveryDatabase::iterator it = std::lower_bound (_database.begin (), _database.end (), ptid);
468470
469471 if (it == _database.end () || ptid == spokesman )
@@ -534,13 +536,14 @@ bool DiscoveryItemDatabase::RemoveEndPoint(
534536
535537bool DiscoveryItemDatabase::AddDataReader (
536538 const GUID_t& spokesman,
539+ const std::string& srcName,
537540 const GUID_t& ptid,
538541 const GUID_t& sid,
539542 const std::string& _typename,
540543 const std::string& topicname,
541544 const std::chrono::steady_clock::time_point& discovered_timestamp)
542545{
543- return AddEndPoint (&ParticipantDiscoveryItem::getDataReaders, spokesman, ptid, sid, _typename, topicname,
546+ return AddEndPoint (&ParticipantDiscoveryItem::getDataReaders, spokesman, srcName, ptid, sid, _typename, topicname,
544547 discovered_timestamp);
545548}
546549
@@ -554,13 +557,14 @@ bool DiscoveryItemDatabase::RemoveDataReader(
554557
555558bool DiscoveryItemDatabase::AddDataWriter (
556559 const GUID_t& spokesman,
560+ const std::string& srcName,
557561 const GUID_t& ptid,
558562 const GUID_t& pid,
559563 const std::string& _typename,
560564 const std::string& topicname,
561565 const std::chrono::steady_clock::time_point& discovered_timestamp)
562566{
563- return AddEndPoint (&ParticipantDiscoveryItem::getDataWriters, spokesman, ptid, pid, _typename, topicname,
567+ return AddEndPoint (&ParticipantDiscoveryItem::getDataWriters, spokesman, srcName, ptid, pid, _typename, topicname,
564568 discovered_timestamp);
565569}
566570
@@ -806,6 +810,26 @@ bool eprosima::discovery_server::operator ==(
806810 return false ;
807811}
808812
813+ ParticipantDiscoveryDatabase& Snapshot::access_snapshot (
814+ const GUID_t& id,
815+ const std::string& name)
816+ {
817+ auto it = std::lower_bound (begin (), end (), id);
818+ const ParticipantDiscoveryDatabase* p = nullptr ;
819+
820+ if (it == end () || *it != id)
821+ {
822+ // not there, emplace
823+ p = &(*emplace (id, name).first );
824+ }
825+ else
826+ {
827+ p = &*it;
828+ }
829+
830+ return const_cast <ParticipantDiscoveryDatabase&>(*p);
831+ }
832+
809833ParticipantDiscoveryDatabase& Snapshot::operator [](
810834 const GUID_t& id)
811835{
@@ -815,7 +839,8 @@ ParticipantDiscoveryDatabase& Snapshot::operator [](
815839 if (it == end () || *it != id)
816840 {
817841 // not there, emplace
818- p = &(*emplace (id).first );
842+ // should never be called from this operator
843+ p = &(*emplace (id, " " ).first );
819844 }
820845 else
821846 {
@@ -877,6 +902,11 @@ void Snapshot::to_xml(
877902 sstream << discovery_database.endpoint_guid .entityId ;
878903 pPtdb->SetAttribute (s_sGUID_entity.c_str (), sstream.str ().c_str ());
879904 }
905+ {
906+ std::stringstream sstream;
907+ sstream << discovery_database.participant_name_ ;
908+ pPtdb->SetAttribute (s_sName.c_str (), sstream.str ().c_str ());
909+ }
880910
881911 for (const ParticipantDiscoveryItem& discovery_item : discovery_database)
882912 {
0 commit comments