00001
00002
00003
00004
00005
00006
00007
00008 #ifndef OPENDDS_DCPS_TOPIC_IMPL_H
00009 #define OPENDDS_DCPS_TOPIC_IMPL_H
00010
00011 #include "dds/DdsDcpsTopicC.h"
00012 #include "dds/DdsDcpsInfoUtilsC.h"
00013 #include "EntityImpl.h"
00014 #include "TopicDescriptionImpl.h"
00015
00016 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00017 #pragma once
00018 #endif
00019
00020 namespace OpenDDS {
00021 namespace DCPS {
00022
00023 class TopicDescriptionImpl;
00024 class Monitor;
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 class OpenDDS_Dcps_Export TopicImpl
00035 : public virtual LocalObject<DDS::Topic>,
00036 public virtual EntityImpl,
00037 public virtual TopicDescriptionImpl {
00038 public:
00039
00040 TopicImpl(const RepoId topic_id,
00041 const char* topic_name,
00042 const char* type_name,
00043 OpenDDS::DCPS::TypeSupport_ptr type_support,
00044 const DDS::TopicQos & qos,
00045 DDS::TopicListener_ptr a_listener,
00046 const DDS::StatusMask & mask,
00047 DomainParticipantImpl* participant);
00048
00049 virtual ~TopicImpl();
00050
00051 virtual DDS::InstanceHandle_t get_instance_handle();
00052
00053 virtual DDS::ReturnCode_t set_qos(const DDS::TopicQos& qos);
00054
00055 virtual DDS::ReturnCode_t get_qos(DDS::TopicQos& qos);
00056
00057 virtual DDS::ReturnCode_t set_listener(DDS::TopicListener_ptr a_listener,
00058 DDS::StatusMask mask);
00059
00060 virtual DDS::TopicListener_ptr get_listener();
00061
00062 virtual DDS::ReturnCode_t get_inconsistent_topic_status(
00063 DDS::InconsistentTopicStatus& a_status);
00064
00065 virtual DDS::ReturnCode_t enable();
00066
00067
00068
00069
00070
00071 RepoId get_id() const;
00072
00073 CORBA::Long entity_refs() const {
00074 return entity_refs_;
00075 }
00076
00077 void add_entity_ref() {
00078 entity_refs_++;
00079 }
00080
00081 void remove_entity_ref() {
00082 entity_refs_--;
00083 }
00084
00085 const char* type_name() const;
00086
00087 virtual void transport_config(const TransportConfig_rch& cfg);
00088
00089 void inconsistent_topic();
00090
00091 private:
00092
00093 DDS::TopicQos qos_;
00094
00095
00096
00097 DDS::StatusMask listener_mask_;
00098
00099 DDS::TopicListener_var listener_;
00100
00101
00102 RepoId id_;
00103
00104
00105 CORBA::Long entity_refs_;
00106
00107
00108
00109 DDS::InconsistentTopicStatus inconsistent_topic_status_;
00110
00111
00112 Monitor* monitor_;
00113 };
00114
00115 }
00116 }
00117
00118 #endif