public override bool Subscribe(AdapterReaderQos qos, QueryParameters queryParameters, AdapterDataCallback <TDataType> clientCallback) { if (queryParameters == null) { throw new ArgumentNullException("queryParameters"); } try { Callback callback = null; if (clientCallback != null) { callback = new Callback(clientCallback); } var subcriber = new Subscriber <TDataType>(topic, queryParameters.Partition, qos, callback == null ? null : callback.Listener, 10); lock (gate) { subscribers.Add(new Subscription(subcriber, callback)); } return(true); } catch (Exception exception) { Trace.TraceError("Failed to subscribe to topic: {0} with params: {1} and qos: {2}, error: {3}", topic, queryParameters, qos, exception); } return(false); }
public override IEnumerable <TDataType> Snapshot(AdapterReaderQos qos, QueryParameters queryParameters) { var waitHandle = new ManualResetEvent(false); using (var callback = new SnapshotCallback(waitHandle)) { using ( var subcriber = new Subscriber <TDataType>(topic, queryParameters.Partition, qos, callback.Listener, 1000)) { waitHandle.WaitOne(Constants.RequestTimeout); return(callback.DataItems); } } }
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 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); }
public abstract IEnumerable <TDataType> Snapshot(AdapterReaderQos qos, QueryParameters queryParameters);
public abstract bool Subscribe(AdapterReaderQos qos, QueryParameters queryParameters, AdapterDataCallback <TDataType> clientCallback);