예제 #1
0
        public void TestOnDataAvailable()
        {
            // Prepare status mask:
            // If a ParticipantListener has both on_data_on_readers() and on_data_available() callbacks enabled
            // (by turning on both status bits), only on_data_on_readers() is called.
            ReturnCode result = _participant.SetListener(_listener, StatusKind.DataAvailableStatus);

            Assert.AreEqual(ReturnCode.Ok, result);

            // Attach to the event
            int        count  = 0;
            DataReader reader = null;

            _listener.DataAvailable += (r) =>
            {
                reader = r;
                count++;
            };

            // Enable entities
            result = _writer.Enable();
            Assert.AreEqual(ReturnCode.Ok, result);

            result = _reader.Enable();
            Assert.AreEqual(ReturnCode.Ok, result);

            // Wait for discovery
            bool found = _writer.WaitForSubscriptions(1, 1000);

            Assert.IsTrue(found);

            // Write some instances
            int total = 5;

            for (int i = 1; i <= total; i++)
            {
                result = _dataWriter.Write(new TestStruct
                {
                    Id = i,
                });
                Assert.AreEqual(ReturnCode.Ok, result);

                result = _dataWriter.WaitForAcknowledgments(new Duration {
                    Seconds = 5
                });
                Assert.AreEqual(ReturnCode.Ok, result);
            }

            Thread.Sleep(100);

            Assert.AreEqual(total, count);
            Assert.IsNotNull(reader);
            Assert.AreEqual(_reader, reader);
        }