private static void RegisterDomain(Topic <T> topicInstance, string domain) { lock (_locker) { DomainParticipantFactory dpf = DomainParticipantFactory.Instance; ErrorHandler.CheckHandle(dpf, "DDS.DomainParticipantFactory.Instance"); var dpQos = new DomainParticipantQos(); dpf.GetDefaultParticipantQos(ref dpQos); topicInstance.Participant = dpf.CreateParticipant(domain, dpQos) ?? (dpf.LookupParticipant(domain) ?? dpf.CreateParticipant(domain, dpQos)); if (topicInstance.Participant == null) { throw new Exception("DDS NOT started, please start / restart your DDS!"); } } }
private void InitializeWriter(AdapterWriterQos desiredQos) { var writerQos = new DataWriterQos(); topicPublisher.GetDefaultDataWriterQos(ref writerQos); topicPublisher.CopyFromTopicQos(ref writerQos, currentTopic.TopicQos); if (desiredQos != null) { writerQos.WriterDataLifecycle.AutodisposeUnregisteredInstances = false; writerQos.Reliability.Kind = desiredQos.MessageReliabilityType.ConvertReliability(); writerQos.Durability.Kind = desiredQos.PersistenceType.ConvertPersistence(); } // Create a DataWritter for the current Topic dataWriter = topicPublisher.CreateDataWriter(currentTopic.TopicMessageTopic, writerQos) as DataWriter <T>; ErrorHandler.CheckHandle( DataWriter, "Publisher.CreateDatawriter (InitializeWriter)"); }
private void CreateDataReader(AdapterReaderQos desiredQos, DataReaderListener <T> listener, int waitForHistoricalData) { if (partitionName.Contains("*")) { partitionName.Replace("*", string.Empty); } if (dataReader != null) { if (listener != null) { ReturnCode status = dataReader.SetListener( listener, StatusKind.DataAvailable | StatusKind.SampleLost | StatusKind.SampleRejected); ErrorHandler.CheckStatus(status, "Subscriber.SetListener (CreateDataReader)"); } } else { // Create a DataReader for the Topic // (using the appropriate QoS) and attach a listener to the data reader on new data available var dataReaderQos = new DataReaderQos(); topicSubscriber.CopyFromTopicQos(ref dataReaderQos, currentTopic.TopicQos); if (desiredQos != null) { dataReaderQos.Durability.Kind = desiredQos.PersistenceType.ConvertPersistence(); dataReaderQos.Reliability.Kind = desiredQos.MessageReliabilityType.ConvertReliability(); } dataReader = topicSubscriber.CreateDataReader( currentTopic.TopicMessageTopic, dataReaderQos, listener, StatusKind.DataAvailable); ErrorHandler.CheckHandle( dataReader, "Subscriber.CreateDatareader (CreateDataReader)"); dataReader.WaitForHistoricalData(new Duration(waitForHistoricalData, 0)); } }
public Publisher(Topic <T> topic, string partitionName, AdapterWriterQos desiredQos) { currentTopic = topic; IDomainParticipant participant = topic.Participant; var publisherQos = new PublisherQos(); ReturnCode status = participant.GetDefaultPublisherQos(ref publisherQos); ErrorHandler.CheckStatus(status, "Publisher.GetDefaultSubscriberQos (Publisher)"); publisherQos.Partition.Name = new string[1]; publisherQos.Partition.Name[0] = partitionName; // Create a Subscriber for the application. topicPublisher = participant.CreatePublisher(publisherQos); ErrorHandler.CheckHandle( topicPublisher, "Publisher.CreateSubscriber (Publisher)"); InitializeWriter(desiredQos); }
public Topic(string topicName, AdapterTopicQos requiredTopicQoS, TypeSupport clientTypeSupport) { if (clientTypeSupport == null) { throw new ArgumentNullException("clientTypeSupport"); } string domain = null; // just using the default partition, named after the topic name TopicName = topicName; TopicType = typeof(T).Name; // Create a DomainParticipantFactory and a DomainParticipant RegisterDomain(this, domain); ErrorHandler.CheckHandle(Participant, "DDS.DomainParticipantFactory.CreateParticipant"); // Register the required datatype. typeSupport = new TopicTypeSupport(clientTypeSupport); ReturnCode status = typeSupport.RegisterType(Participant, topicName); ErrorHandler.CheckStatus(status, "Topic.TopicMessageTypeSupport.RegisterType"); TopicQos topicQos = null; Participant.GetDefaultTopicQos(ref topicQos); ApplyQos(topicQos, requiredTopicQoS); TopicQos = topicQos; TopicMessageTopic = Participant.CreateTopic(topicName, topicName, topicQos); Participant.SetDefaultTopicQos(topicQos); if (TopicMessageTopic == null) { throw new Exception("QoS for topic " + TopicName + " FAILED!, please check QoS!"); } }
public Subscriber(Topic <T> topic, string partitionName, AdapterReaderQos desiredQos, DataReaderListener <T> listener, int waitForHistoricalData) { currentTopic = topic; this.partitionName = partitionName; this.listener = listener; IDomainParticipant participant = topic.Participant; var subQos = new SubscriberQos(); ReturnCode status = participant.GetDefaultSubscriberQos(ref subQos); ErrorHandler.CheckStatus( status, "Subscriber.GetDefaultSubscriberQos (Subscriber)"); subQos.Partition.Name = new string[1]; subQos.Partition.Name[0] = partitionName; // Create a Subscriber for the application. topicSubscriber = participant.CreateSubscriber(subQos); ErrorHandler.CheckHandle( topicSubscriber, "Subscriber.CreateSubscriber (Subscriber)"); CreateDataReader(desiredQos, listener, waitForHistoricalData); }