123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197 |
- #ifndef _FASTDDS_RTPS_EDPSERVER_H_
- #define _FASTDDS_RTPS_EDPSERVER_H_
- #ifndef DOXYGEN_SHOULD_SKIP_THIS_PUBLIC
- #include <fastdds/rtps/common/CacheChange.h>
- #include <fastdds/rtps/builtin/data/ParticipantProxyData.h>
- #include <fastdds/rtps/builtin/discovery/endpoint/EDPSimple.h>
- #include <set>
- namespace eprosima {
- namespace fastrtps {
- namespace rtps {
- class EDPServerPUBListener;
- class EDPServerSUBListener;
- class EDPServer : public EDPSimple
- {
- friend class EDPServerPUBListener;
- friend class EDPServerSUBListener;
- typedef std::set<InstanceHandle_t> key_list;
-
- key_list _PUBdemises, _SUBdemises;
-
- DurabilityKind_t _durability;
- public:
-
- EDPServer(
- PDP* p,
- RTPSParticipantImpl* part,
- DurabilityKind_t durability_kind)
- : EDPSimple(p, part)
- , _durability(durability_kind)
- {
- }
- ~EDPServer() override
- {
- }
-
- bool processLocalReaderProxyData(
- RTPSReader* reader,
- ReaderProxyData* rdata) override;
-
- bool processLocalWriterProxyData(
- RTPSWriter* writer,
- WriterProxyData* wdata) override;
-
- bool removeLocalReader(
- RTPSReader*R) override;
-
- bool removeLocalWriter(
- RTPSWriter*W) override;
-
- inline bool pendingHistoryCleaning()
- {
- return !(_PUBdemises.empty() && _SUBdemises.empty());
- }
-
- bool trimPUBWriterHistory()
- {
- return trimWriterHistory<ProxyHashTable<WriterProxyData>*>(_PUBdemises,
- *publications_writer_.first, *publications_writer_.second, &ParticipantProxyData::m_writers);
- }
- bool trimSUBWriterHistory()
- {
- return trimWriterHistory<ProxyHashTable<ReaderProxyData>*>(_SUBdemises,
- *subscriptions_writer_.first, *subscriptions_writer_.second, &ParticipantProxyData::m_readers);
- }
-
- bool ongoingDeserialization();
-
- void processPersistentData();
- protected:
-
- bool addPublisherFromHistory(
- CacheChange_t& c)
- {
- return addEndpointFromHistory(*publications_writer_.first, *publications_writer_.second, c);
- }
- bool addSubscriberFromHistory(
- CacheChange_t& c)
- {
- return addEndpointFromHistory(*subscriptions_writer_.first, *subscriptions_writer_.second, c);
- }
-
- void removePublisherFromHistory(
- const InstanceHandle_t&);
- void removeSubscriberFromHistory(
- const InstanceHandle_t&);
- private:
-
- template<class ProxyCont>
- bool trimWriterHistory(
- key_list& _demises,
- StatefulWriter& writer,
- WriterHistory& history,
- ProxyCont ParticipantProxyData::* pCont);
-
- bool addEndpointFromHistory(
- StatefulWriter& writer,
- WriterHistory& history,
- CacheChange_t& c);
-
- virtual bool createSEDPEndpoints() override;
- };
- }
- }
- }
- #endif
- #endif
|