public void SendReceiveThroughChannel_ObjectTransportConnectedChannel_ObjectSentAndReceivedBetweenClients() { //Arrange var joinedNetworkChannels = MockNetworkChannelFactory.GetConnectedChannels(); MockObjectMessage sendMessage = new MockObjectMessage(); sendMessage.Property1_string = "test send"; sendMessage.Property2_int = 123; sendMessage.Property3_decimal = 56M; MockObjectMessage receivedMessage = null; //Act ObjectTransport client1 = TestObjectTransportFactory.CreateNewObjectTransport(joinedNetworkChannels.Item1); client1.Receive <MockObjectMessage>(o => { receivedMessage = o; }) .Execute(); ObjectTransport client2 = TestObjectTransportFactory.CreateNewObjectTransport(joinedNetworkChannels.Item2); client2.Send(sendMessage) .Execute(); Utilities.WaitFor(ref receivedMessage); //Assert Assert.AreEqual(sendMessage.Property3_decimal, receivedMessage.Property3_decimal); Assert.AreEqual(sendMessage.Property1_string, receivedMessage.Property1_string); Assert.AreEqual(sendMessage.Property2_int, receivedMessage.Property2_int); }
public void Receive_ObjectWithBinaryProperty_BinaryReceived() { //Arrange var joinedNetworkChannels = MockNetworkChannelFactory.GetConnectedChannels(); MockObjectMessageWithBinary sendMessage = new MockObjectMessageWithBinary(); sendMessage.Property2_String = "Message with binary"; sendMessage.Property1_Bytes = Encoding.ASCII.GetBytes("hello world"); MockObjectMessageWithBinary receivedMessage = null; Client receivedClient = null; //Act ObjectTransport client1 = TestObjectTransportFactory.CreateNewObjectTransport(joinedNetworkChannels.Item1); client1.Receive <MockObjectMessageWithBinary>((c, o) => { receivedClient = c; receivedMessage = o; }) .Execute(); ObjectTransport client2 = TestObjectTransportFactory.CreateNewObjectTransport(joinedNetworkChannels.Item2); client2.Send(sendMessage) .Execute(); //Assert Assert.AreEqual("hello world", System.Text.Encoding.UTF8.GetString(receivedMessage.Property1_Bytes)); Assert.AreEqual(receivedMessage.Property2_String, "Message with binary"); Assert.AreEqual("10.0.0.2", receivedClient.IPAddress); }
public void TCPClient_SendUnreliably_ExceptionThrown() { //Arrange Client client = null; Client clientDisconnect = null; ObjectTransport serverObjectTransport = TestObjectTransportFactory.CreateNewObjectTransport(Server); serverObjectTransport.Start("127.0.0.1", 0); ObjectTransport clientObjectTransport = TestObjectTransportFactory.CreateNewObjectTransport(Client1); clientObjectTransport.OnClientDisconnect(c => clientDisconnect = c); clientObjectTransport.Start("127.0.0.1", Server.LocalPort); Utilities.WaitFor(() => serverObjectTransport.GetConnectedClients().Count() == 1); client = clientObjectTransport.GetConnectedClients().First(); Utilities.WaitFor(ref client); var message = new MockObjectMessage(); //Act clientObjectTransport.Send(message) .Unreliable() .Execute(); }
public void SendWithResponse_ObjectWithPropertiesSet_PayloadWithObjectAndTokenSent() { //Arrange var sentPayload = string.Empty; var client = new Client("10.0.0.1", 123); var networkChannel = MockNetworkChannelFactory.GetMockedNetworkChannel() .OnSendHandle((Client, payload) => sentPayload = payload); MockObjectMessage sendObject = new MockObjectMessage(); sendObject.Property1_string = "Test String"; sendObject.Property2_int = 12; sendObject.Property3_decimal = 1.33M; ObjectTransport transport = TestObjectTransportFactory.CreateNewObjectTransport(networkChannel); networkChannel.SimulateClientConnect(client); //Act transport.Send(sendObject) .Response <MockObjectMessage>(o => o.GetType()) .Execute(); Utilities.WaitFor(ref sentPayload); //Assert Regex rgx = new Regex(typeof(MockObjectMessage).AssemblyQualifiedName + "::(.*)::{\"Property1_string\":\"Test String\",\"Property2_int\":12,\"Property3_decimal\":1.33}"); Assert.IsTrue(rgx.IsMatch(sentPayload)); }
public void SendToAll_Except2Client_AllClientsExcept2AreSendTo() { //Arrange var client1 = new Client("10.0.0.1", 123); var client2 = new Client("10.0.0.2", 123); var client3 = new Client("10.0.0.3", 123); var clientsSendTo = new List <Client>(); var networkChannel = MockNetworkChannelFactory.GetMockedNetworkChannel() .OnSendHandle((Client, paylaod) => clientsSendTo.Add(Client)); MockObjectMessage sendObject = new MockObjectMessage(); sendObject.Property1_string = "Test String"; sendObject.Property2_int = 12; sendObject.Property3_decimal = 1.33M; ObjectTransport transport = TestObjectTransportFactory.CreateNewObjectTransport(networkChannel); networkChannel.SimulateClientConnect(client1); networkChannel.SimulateClientConnect(client2); networkChannel.SimulateClientConnect(client3); //Act transport.Send(sendObject) .Response <MockObjectMessage>(o => o.GetType()) .ToAllExcept(client1, client3) .Execute(); //Assert Assert.AreEqual(1, clientsSendTo.Count); Assert.AreEqual(clientsSendTo[0].IPAddress, "10.0.0.2"); }
public void SendExecute_ObjectWithProperties_PayloadWithObjectAndTypeSent() { //Arrange var sentPayload = string.Empty; var client = new Client("10.0.0.1", 123); var networkChannel = MockNetworkChannelFactory.GetMockedNetworkChannel() .OnSendHandle((Client, payload) => sentPayload = payload); MockObjectMessage sendObject = new MockObjectMessage(); sendObject.Property1_string = "Test String"; sendObject.Property2_int = 12; sendObject.Property3_decimal = 1.33M; //Act ObjectTransport transport = TestObjectTransportFactory.CreateNewObjectTransport(networkChannel); networkChannel.SimulateClientConnect(client); transport.Send(sendObject) .To(client) .Execute(); //Assert Assert.AreEqual(typeof(MockObjectMessage).AssemblyQualifiedName + "::{\"Property1_string\":\"Test String\",\"Property2_int\":12,\"Property3_decimal\":1.33}", sentPayload); }
public void TimeOut_MessageSentToMultipleClientsWithSomeResponding_TimeOutFunctionReturnsClientsWhoDidNotRespond() { //Arrange var client1 = new Client("10.0.0.1", 123); var client2 = new Client("10.0.0.2", 123); var client3 = new Client("10.0.0.3", 123); Client[] clientsWhoDidNotRespond = null; MockObjectMessage messageThatTimedOut = null; var sentPayload = string.Empty; var networkChannel = MockNetworkChannelFactory.GetMockedNetworkChannel() .OnSendHandle((Client, payload) => sentPayload = payload); MockObjectMessage sendObject = new MockObjectMessage(); sendObject.Property1_string = "Test String"; sendObject.Property2_int = 12; sendObject.Property3_decimal = 1.33M; ObjectTransport transport = TestObjectTransportFactory.CreateNewObjectTransport(networkChannel); networkChannel.SimulateClientConnect(client1); networkChannel.SimulateClientConnect(client2); networkChannel.SimulateClientConnect(client3); //Act transport.Send(sendObject) .Response <MockObjectMessage>(o => { }) .SetTimeOut(2) .OnTimeOut( (c, o) => { clientsWhoDidNotRespond = c; messageThatTimedOut = o; }) .ToAll() .Execute(); //Echo back the message networkChannel.SimulateClientResponse(client2, sentPayload); Utilities.WaitFor(ref messageThatTimedOut); //Assert Assert.AreEqual(2, clientsWhoDidNotRespond.Length); Assert.IsTrue(clientsWhoDidNotRespond.Contains(client1)); Assert.IsTrue(clientsWhoDidNotRespond.Contains(client3)); Assert.AreEqual(sendObject, messageThatTimedOut); }
public void SendReceiveReplyThroughChannel_TwoObjectTransportsConnected_SameTokenUsed() { //Arrange var client2ReceiveFunctionCalled = false; var client2RespondFunctionCalled = false; var joinedNetworkChannels = MockNetworkChannelFactory.GetConnectedChannels(); MockObjectMessage sendMessage = new MockObjectMessage(); sendMessage.Property1_string = "test send"; sendMessage.Property2_int = 123; sendMessage.Property3_decimal = 56M; MockObjectMessage receivedMessage = null; //Act ObjectTransport client1 = TestObjectTransportFactory.CreateNewObjectTransport(joinedNetworkChannels.Item1); client1.Receive <MockObjectMessage>() .Reply((c, o) => { o.Property1_string = "replied"; return(o); }) .Execute(); ObjectTransport client2 = TestObjectTransportFactory.CreateNewObjectTransport(joinedNetworkChannels.Item2); client2.Send(sendMessage) .Response <MockObjectMessage>(o => { client2RespondFunctionCalled = true; receivedMessage = o; }) .Execute(); client2.Receive <MockObjectMessage>(o => { client2ReceiveFunctionCalled = true; receivedMessage = o; }).Execute(); Utilities.WaitFor(ref receivedMessage); //Assert Assert.IsFalse(client2ReceiveFunctionCalled); Assert.IsTrue(client2RespondFunctionCalled); }
static void Main(string[] args) { Console.WriteLine("Welcome to this simple Chat room!"); Console.WriteLine("Would you like to:"); Console.WriteLine("1) Create a TCP server"); Console.WriteLine("2) Connect to TCP server"); Console.WriteLine("3) Creaet a UDP server"); Console.WriteLine("4) Connect to UDP server"); string answer = Console.ReadLine(); ObjectTransport transport = transport = CheckCreateTransport(answer); if (transport == null) { return; } //Write to console when a client connects transport.OnClientConnect(c => Console.WriteLine("{0} - Client connected", c.IPAddress)); //Write to console when a client disconnects transport.OnClientDisconnect(c => Console.WriteLine("{0} - Client disconnected", c.IPAddress)); string message; while (true) { message = Console.ReadLine(); if (message == "exit") { break; } transport.Send(new Message() { Body = message }) .ToAll() .Execute(); } }
static ObjectTransport CheckCreateServer(string answer) { ObjectTransport objectTransportServer = null; if (answer == "1") { Console.WriteLine("Please specify an IP address"); var ipAddress = Console.ReadLine(); //Setup a TCP Server objectTransportServer = ObjectTransport.Factory.CreateTCPServer(ipAddress, 8888); Console.WriteLine("Created TCP server on port 8888"); } if (answer == "3") { Console.WriteLine("Please specify an IP address"); var ipAddress = Console.ReadLine(); //Setup a TCP Server objectTransportServer = ObjectTransport.Factory.CreateUDPServer(ipAddress, 8888); Console.WriteLine("Created UDP server on port 8888"); } //Receive an object of type "Message" objectTransportServer?.Receive <Message>((client, received_message) => { Console.WriteLine("{0} - {1}", client.IPAddress, received_message.Body); //Send the received message to all other clients //except the client who sent the message objectTransportServer.Send(received_message) .ToAllExcept(client) .Execute(); }) .Execute(); return(objectTransportServer); }
public void ReceiveReply_WithClientAction_ObjectAndClientInjectedInToAction() { //Arrange var joinedNetworkChannels = MockNetworkChannelFactory.GetConnectedChannels(); MockObjectMessage sendMessage = new MockObjectMessage(); sendMessage.Property1_string = "test send"; sendMessage.Property2_int = 123; sendMessage.Property3_decimal = 56M; MockObjectMessage receivedMessage = null; Client receivedClient = null; //Act ObjectTransport client1 = TestObjectTransportFactory.CreateNewObjectTransport(joinedNetworkChannels.Item1); client1.Receive <MockObjectMessage>() .Reply((c, o) => { receivedMessage = o; receivedClient = c; return(null); }) .Execute(); ObjectTransport client2 = TestObjectTransportFactory.CreateNewObjectTransport(joinedNetworkChannels.Item2); client2.Send(sendMessage) .Execute(); Utilities.WaitFor(ref receivedMessage); //Assert Assert.AreEqual(sendMessage.Property3_decimal, receivedMessage.Property3_decimal); Assert.AreEqual(sendMessage.Property1_string, receivedMessage.Property1_string); Assert.AreEqual(sendMessage.Property2_int, receivedMessage.Property2_int); Assert.AreEqual("10.0.0.2", receivedClient.IPAddress); }
public void TCPNetwork_SendAndReplyMessage_ResponseIsCalled() { //Arrange Client client = null; Client clientDisconnect = null; server = new TCPServerChannel("127.0.0.1", 0); ObjectTransport serverObjectTransport = TestObjectTransportFactory.CreateNewObjectTransport(server); tcpclient = new TCPClientChannel("127.0.0.1", server.Port); ObjectTransport clientObjectTransport = TestObjectTransportFactory.CreateNewObjectTransport(tcpclient); clientObjectTransport.OnClientDisconnect(c => clientDisconnect = c); client = clientObjectTransport.GetConnectedClients().First(); Utilities.WaitFor(ref client); Utilities.WaitFor(() => serverObjectTransport.GetConnectedClients().Count() == 1); //Act serverObjectTransport.Receive <MockObjectMessage>() .Reply((o) => { return(o); }) .Execute(); var mockObject = new MockObjectMessage() { Property1_string = "Mock Object" }; MockObjectMessage responseObject = null; clientObjectTransport.Send(mockObject) .Response <MockObjectMessage>((r) => { responseObject = r; }) .Execute(); Utilities.WaitFor(ref responseObject); //Assert Assert.AreEqual(responseObject.Property1_string, "Mock Object"); }
public void UDPServer_SendObject_CorrectObjectSent() { //Arrange MockObjectMessage receivedObject = null; udpServer = new UDPServerChannel("127.0.0.1", 0, 32); Client client = null; ObjectTransport serverObjectTransport = TestObjectTransportFactory.CreateNewObjectTransport(udpServer); serverObjectTransport.OnClientConnect(c => client = c); udpClient = new UDPClientChannel("127.0.0.1", udpServer.Port); ObjectTransport clientObjectTransport = TestObjectTransportFactory.CreateNewObjectTransport(udpClient); Utilities.WaitFor(ref client); //Act clientObjectTransport.Receive <MockObjectMessage>(o => receivedObject = o ).Execute(); serverObjectTransport.Send(new MockObjectMessage() { Property1_string = "hello world!", Property2_int = 123, Property3_decimal = 12.3M }) .To(client) .Execute(); Utilities.WaitFor(ref receivedObject); //Assert Assert.AreEqual("hello world!", receivedObject.Property1_string); Assert.AreEqual(123, receivedObject.Property2_int); Assert.AreEqual(12.3M, receivedObject.Property3_decimal); }
public void TimeOut_TimeOutFunctionSet_TimeOutFunctionCalled() { //Arrange var client = new Client("10.0.0.1", 123); Client[] clientsWhoDidNotRespond = null; MockObjectMessage messageThatTimedOut = null; var sentPayload = string.Empty; var networkChannel = MockNetworkChannelFactory.GetMockedNetworkChannel() .OnSendHandle((Client, payload) => sentPayload = payload); MockObjectMessage sendObject = new MockObjectMessage(); sendObject.Property1_string = "Test String"; sendObject.Property2_int = 12; sendObject.Property3_decimal = 1.33M; //Act ObjectTransport transport = TestObjectTransportFactory.CreateNewObjectTransport(networkChannel); networkChannel.SimulateClientConnect(client); transport.Send(sendObject) .Response <MockObjectMessage>(o => { }) .SetTimeOut(1) .OnTimeOut( (c, o) => { clientsWhoDidNotRespond = c; messageThatTimedOut = o; }) .Execute(); Utilities.WaitFor(ref clientsWhoDidNotRespond); //Assert Assert.AreEqual(1, clientsWhoDidNotRespond.Length); Assert.AreEqual(sendObject, messageThatTimedOut); }
public void Protobuff_UsingProtobuffSerializer_objectIsSentAndReceived() { //Arrange var joinedNetworkChannels = MockNetworkChannelFactory.GetConnectedChannels(); Protobuf_MockObjectMessage sendMessage = new Protobuf_MockObjectMessage(); sendMessage.Property1_string = "test send"; sendMessage.Property2_int = 123; sendMessage.Property3_decimal = 56M; Protobuf_MockObjectMessage receivedMessage = null; Client receivedClient = null; //Act ObjectTransport client1 = TestObjectTransportFactory.CreateNewObjectTransport(joinedNetworkChannels.Item1, new ProtobufSerializer()); client1.Receive <Protobuf_MockObjectMessage>((c, o) => { receivedClient = c; receivedMessage = o; }) .Execute(); ObjectTransport client2 = TestObjectTransportFactory.CreateNewObjectTransport(joinedNetworkChannels.Item2, new ProtobufSerializer()); client2.Send(sendMessage) .Execute(); //Assert Assert.AreEqual(sendMessage.Property3_decimal, receivedMessage.Property3_decimal); Assert.AreEqual(sendMessage.Property1_string, receivedMessage.Property1_string); Assert.AreEqual(sendMessage.Property2_int, receivedMessage.Property2_int); Assert.AreEqual("10.0.0.2", receivedClient.IPAddress); }