Example #1
0
        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);
        }
Example #2
0
        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);
                }
            }
        }
Example #3
0
        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));
            }
        }
Example #4
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);
        }
Example #5
0
 public abstract IEnumerable <TDataType> Snapshot(AdapterReaderQos qos, QueryParameters queryParameters);
Example #6
0
 public abstract bool Subscribe(AdapterReaderQos qos, QueryParameters queryParameters,
                                AdapterDataCallback <TDataType> clientCallback);