コード例 #1
0
        public void TestSendAndReceive()
        {
            var blockComm1 = new ManualResetEvent(false);
            var blockComm2 = new ManualResetEvent(false);

            var expectedCount = 0;

            var comm1 = new UdpCommunicator(CommEndPoint1, Converter);
            var comm2 = new UdpCommunicator(CommEndPoint2, Converter);

            comm1.OnEnvelope += (Envelope env) =>
            {
                blockComm1.Set();
                Assert.True(env.MessageContent.SenderId == CommId2);
                Assert.True(env.MessageContent.ConversationId == ConvoId);
                Assert.True(env.MessageContent.MessageCount == expectedCount);

                expectedCount++;
            };

            comm2.OnEnvelope += (Envelope env) =>
            {
                blockComm2.Set();
                Assert.True(env.MessageContent.SenderId == CommId1);
                Assert.True(env.MessageContent.ConversationId == ConvoId);
                Assert.True(env.MessageContent.MessageCount == expectedCount);

                expectedCount++;
            };

            comm1.Start();
            comm2.Start();

            var startMessage = new Message()
            {
                SenderId       = CommId1,
                MessageId      = MessageType.UNKNOWN,
                ConversationId = ConvoId,
                MessageCount   = expectedCount
            };

            comm1.SendEnvelope(new Envelope(startMessage, CommEndPoint2));

            Assert.True(blockComm2.WaitOne(UdpCommunicator.Timeout * WaitFactor), "Communicator 2 never received message");

            var nextMessage = new Message()
            {
                SenderId       = CommId2,
                MessageId      = MessageType.UNKNOWN,
                ConversationId = ConvoId,
                MessageCount   = expectedCount
            };

            comm2.SendEnvelope(new Envelope(nextMessage, CommEndPoint1));

            Assert.True(blockComm1.WaitOne(UdpCommunicator.Timeout * WaitFactor), "Communicator 1 never received message");

            comm1.Stop();
            comm2.Stop();
        }