00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 #ifndef OPENDDS_DDS_DCPS_DISCOVERY_H
00009 #define OPENDDS_DDS_DCPS_DISCOVERY_H
00010 
00011 #include "dds/DdsDcpsInfoUtilsC.h"
00012 #include "RcObject_T.h"
00013 #include "RcHandle_T.h"
00014 
00015 #include "dds/DCPS/DataReaderCallbacks.h"
00016 #include "dds/DCPS/DataWriterCallbacks.h"
00017 #include "dds/DdsDcpsSubscriptionC.h"
00018 
00019 #include "dds/DCPS/PoolAllocator.h"
00020 #include "dds/DCPS/PoolAllocationBase.h"
00021 
00022 #if !defined (ACE_LACKS_PRAGMA_ONCE)
00023 #pragma once
00024 #endif 
00025 
00026 ACE_BEGIN_VERSIONED_NAMESPACE_DECL
00027 class ACE_Configuration_Heap;
00028 ACE_END_VERSIONED_NAMESPACE_DECL
00029 
00030 namespace OpenDDS {
00031 namespace DCPS {
00032 
00033 class DomainParticipantImpl;
00034 class DataWriterImpl;
00035 class DataReaderImpl;
00036 
00037 
00038 
00039 
00040 
00041 
00042 
00043 
00044 
00045 
00046 class OpenDDS_Dcps_Export Discovery : public RcObject<ACE_SYNCH_MUTEX> {
00047 public:
00048 
00049 
00050   typedef OPENDDS_STRING RepoKey;
00051 
00052   explicit Discovery(const RepoKey& key) : key_(key) { }
00053 
00054 
00055   static const char DEFAULT_REPO[];
00056   static const char DEFAULT_RTPS[];
00057   static const char DEFAULT_STATIC[];
00058 
00059   
00060   virtual bool active() { return true; }
00061 
00062   virtual DDS::Subscriber_ptr init_bit(DomainParticipantImpl* participant) = 0;
00063 
00064   virtual void fini_bit(DCPS::DomainParticipantImpl* participant) = 0;
00065 
00066   virtual RepoId bit_key_to_repo_id(DomainParticipantImpl* participant,
00067                                     const char* bit_topic_name,
00068                                     const DDS::BuiltinTopicKey_t& key) const = 0;
00069 
00070   RepoKey key() const { return this->key_; }
00071 
00072   class OpenDDS_Dcps_Export Config : public PoolAllocationBase {
00073   public:
00074     virtual ~Config();
00075     virtual int discovery_config(ACE_Configuration_Heap& cf) = 0;
00076   };
00077 
00078   virtual bool attach_participant(
00079     DDS::DomainId_t domainId,
00080     const RepoId& participantId) = 0;
00081 
00082   virtual AddDomainStatus add_domain_participant(
00083     DDS::DomainId_t domain,
00084     const DDS::DomainParticipantQos& qos) = 0;
00085 
00086   virtual bool remove_domain_participant(
00087     DDS::DomainId_t domainId,
00088     const RepoId& participantId) = 0;
00089 
00090   virtual bool ignore_domain_participant(
00091     DDS::DomainId_t domainId,
00092     const RepoId& myParticipantId,
00093     const RepoId& ignoreId) = 0;
00094 
00095   virtual bool update_domain_participant_qos(
00096     DDS::DomainId_t domain,
00097     const RepoId& participantId,
00098     const DDS::DomainParticipantQos& qos) = 0;
00099 
00100 
00101   
00102 
00103   virtual TopicStatus assert_topic(
00104     RepoId_out topicId,
00105     DDS::DomainId_t domainId,
00106     const RepoId& participantId,
00107     const char* topicName,
00108     const char* dataTypeName,
00109     const DDS::TopicQos& qos,
00110     bool hasDcpsKey) = 0;
00111 
00112   virtual TopicStatus find_topic(
00113     DDS::DomainId_t domainId,
00114     const char* topicName,
00115     CORBA::String_out dataTypeName,
00116     DDS::TopicQos_out qos,
00117     RepoId_out topicId) = 0;
00118 
00119   virtual TopicStatus remove_topic(
00120     DDS::DomainId_t domainId,
00121     const RepoId& participantId,
00122     const RepoId& topicId) = 0;
00123 
00124   virtual bool ignore_topic(
00125     DDS::DomainId_t domainId,
00126     const RepoId& myParticipantId,
00127     const RepoId& ignoreId) = 0;
00128 
00129   virtual bool update_topic_qos(
00130     const RepoId& topicId,
00131     DDS::DomainId_t domainId,
00132     const RepoId& participantId,
00133     const DDS::TopicQos& qos) = 0;
00134 
00135 
00136   
00137 
00138   virtual void pre_writer(DataWriterImpl*) {}
00139 
00140 
00141 
00142 
00143 
00144 
00145   virtual RepoId add_publication(
00146     DDS::DomainId_t domainId,
00147     const RepoId& participantId,
00148     const RepoId& topicId,
00149     DataWriterCallbacks* publication,
00150     const DDS::DataWriterQos& qos,
00151     const TransportLocatorSeq& transInfo,
00152     const DDS::PublisherQos& publisherQos) = 0;
00153 
00154   virtual bool remove_publication(
00155     DDS::DomainId_t domainId,
00156     const RepoId& participantId,
00157     const RepoId& publicationId) = 0;
00158 
00159   virtual bool ignore_publication(
00160     DDS::DomainId_t domainId,
00161     const RepoId& myParticipantId,
00162     const RepoId& ignoreId) = 0;
00163 
00164   virtual bool update_publication_qos(
00165     DDS::DomainId_t domainId,
00166     const RepoId& partId,
00167     const RepoId& dwId,
00168     const DDS::DataWriterQos& qos,
00169     const DDS::PublisherQos& publisherQos) = 0;
00170 
00171 
00172   
00173 
00174   virtual void pre_reader(DataReaderImpl*) {}
00175 
00176 
00177 
00178 
00179 
00180 
00181   virtual RepoId add_subscription(
00182     DDS::DomainId_t domainId,
00183     const RepoId& participantId,
00184     const RepoId& topicId,
00185     DataReaderCallbacks* subscription,
00186     const DDS::DataReaderQos& qos,
00187     const TransportLocatorSeq& transInfo,
00188     const DDS::SubscriberQos& subscriberQos,
00189     const char* filterClassName,
00190     const char* filterExpression,
00191     const DDS::StringSeq& exprParams) = 0;
00192 
00193   virtual bool remove_subscription(
00194     DDS::DomainId_t domainId,
00195     const RepoId& participantId,
00196     const RepoId& subscriptionId) = 0;
00197 
00198   virtual bool ignore_subscription(
00199     DDS::DomainId_t domainId,
00200     const RepoId& myParticipantId,
00201     const RepoId& ignoreId) = 0;
00202 
00203   virtual bool update_subscription_qos(
00204     DDS::DomainId_t domainId,
00205     const RepoId& partId,
00206     const RepoId& drId,
00207     const DDS::DataReaderQos& qos,
00208     const DDS::SubscriberQos& subscriberQos) = 0;
00209 
00210   virtual bool update_subscription_params(
00211     DDS::DomainId_t domainId,
00212     const RepoId& participantId,
00213     const RepoId& subscriptionId,
00214     const DDS::StringSeq& params) = 0;
00215 
00216 
00217   
00218 
00219   virtual void association_complete(
00220     DDS::DomainId_t domainId,
00221     const RepoId& participantId,
00222     const RepoId& localId,
00223     const RepoId& remoteId) = 0;
00224 
00225   virtual bool supports_liveliness() const { return false; }
00226 
00227   virtual void signal_liveliness(const DDS::DomainId_t ,
00228                                  const RepoId& ,
00229                                  DDS::LivelinessQosPolicyKind ) { }
00230 
00231 protected:
00232   DDS::ReturnCode_t create_bit_topics(DomainParticipantImpl* participant);
00233 
00234 private:
00235   RepoKey        key_;
00236 
00237 };
00238 
00239 typedef RcHandle<Discovery> Discovery_rch;
00240 
00241 } 
00242 } 
00243 
00244 #endif