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(); }