Exemple #1
0
        private ShapeWaitSet CreateTriangleReader()
        {
            DataReaderQos qos = GetDataReaderQos();

            ITopicDescription topic = null;

            if (_config.ReaderFilterConfig.Enabled)
            {
                string filter = _config.ReaderFilterConfig.FilterKind == FilterKind.Inside ? FILTER_INSIDE : FILTER_OUTSIDE;
                topic = _participant.CreateContentFilteredTopic("CFTriangle" + (++_cfTriangleCount),
                                                                _triangleTopic, filter,
                                                                _config.ReaderFilterConfig.X0.ToString(),
                                                                _config.ReaderFilterConfig.X1.ToString(),
                                                                _config.ReaderFilterConfig.Y0.ToString(),
                                                                _config.ReaderFilterConfig.Y1.ToString());
            }
            else
            {
                topic = _triangleTopic;
            }

            DataReader reader = _subscriber.CreateDataReader(topic, qos);

            if (reader == null)
            {
                throw new Exception("Could not create triangle data reader");
            }

            ShapeTypeDataReader triangleDataReader = new ShapeTypeDataReader(reader);

            return(new ShapeWaitSet(triangleDataReader, TriangleTopicDataAvailable));
        }
Exemple #2
0
        private void TriangleTopicDataAvailable(ShapeTypeDataReader dr)
        {
            List <ShapeType>  samples = new List <ShapeType>();
            List <SampleInfo> infos   = new List <SampleInfo>();
            ReturnCode        error   = dr.Take(samples, infos);

            if (error == ReturnCode.Ok)
            {
                for (int i = 0; i < samples.Count; i++)
                {
                    SampleInfo info   = infos[i];
                    ShapeType  sample = samples[i];
                    if (info.ValidData)
                    {
                        int          x      = Convert.ToInt32((sample.x - (sample.shapesize / 2)) * _factorX);
                        int          y      = Convert.ToInt32((sample.y - (sample.shapesize / 2)) * _factorY);
                        TriangleType square = new TriangleType
                        {
                            Color             = sample.color,
                            X                 = x,
                            Y                 = y,
                            Size              = sample.shapesize,
                            PublicationHandle = info.PublicationHandle
                        };

                        TriangleUpdated?.Invoke(this, square);
                    }
                }
            }
        }
Exemple #3
0
        public ShapeWaitSet(ShapeTypeDataReader dataReader, Action <ShapeTypeDataReader> dataAvailableFunc)
        {
            _dataAvailableFunc = dataAvailableFunc;
            _dataReader        = dataReader;

            _waitSet = new WaitSet();
            _thread  = new Thread(DoThreadActivity)
            {
                IsBackground = true
            };

            _cancelCondition = new GuardCondition();
            _statusCondition = dataReader.StatusCondition;
            _waitSet.AttachCondition(_statusCondition);
            _waitSet.AttachCondition(_cancelCondition);
            _statusCondition.EnabledStatuses = StatusKind.DataAvailableStatus;
            _thread.Start();
        }