javacommons/comms/tsrc/javaapi/javasrc/com/nokia/mj/test/comms/TestCommsServerEndpoint.java
changeset 87 1627c337e51e
parent 21 2a9601315dfc
--- a/javacommons/comms/tsrc/javaapi/javasrc/com/nokia/mj/test/comms/TestCommsServerEndpoint.java	Fri Oct 15 12:29:39 2010 +0300
+++ b/javacommons/comms/tsrc/javaapi/javasrc/com/nokia/mj/test/comms/TestCommsServerEndpoint.java	Fri Oct 29 11:49:32 2010 +0300
@@ -119,6 +119,15 @@
             }
         }));
 
+        aSuite.addTest(new TestCommsServerEndpoint("testServerAndTwoClients", new TestMethod()
+        {
+            public void run(TestCase tc)
+            {
+                ((TestCommsServerEndpoint) tc).testServerAndTwoClients();
+            }
+        }));
+
+
         return aSuite;
     }
 
@@ -724,6 +733,89 @@
         }
     }
 
+    public void testServerAndTwoClients()
+    {
+        System.out.println("TestCommsServerEndpoint.testServerAndTwoClients()");
+
+        class RouterListener implements CommsListener
+        {
+            CommsEndpointBase iComms;
+            CommsMessage iFirstMessage;
+
+            public RouterListener(CommsEndpointBase aComms)
+            {
+                iComms = aComms;
+            }
+
+            public void processMessage(CommsMessage aMessage)
+            {
+                if (iFirstMessage == null)
+                {
+                    // delay reply until second message is received
+                    iFirstMessage = aMessage;
+                }
+                else
+                {
+                    // reply to first client
+                    CommsMessage reply = new CommsMessage();
+                    reply.replyTo(iFirstMessage);
+                    iComms.send(reply);
+        
+                    // reply to second client
+                    reply.replyTo(aMessage);
+                    iComms.send(reply);
+                }
+            }
+        }
+
+        class SendReceiver extends Thread
+        {
+            public void run()
+            {
+                try
+                {
+                    CommsEndpoint client = new CommsEndpoint();
+                    client.connect(SERVER_ADDRESS);
+                    CommsMessage reply = client.sendReceive(new CommsMessage(), CommsEndpoint.WAIT_FOR_EVER);
+                    client.disconnect();
+                    client.destroy();
+                }
+                catch (Exception e)
+                {
+                    e.printStackTrace();
+                    fail("SendReceiver.run");
+                }
+            }
+        }
+
+        CommsServerEndpoint server = null;
+        try
+        {
+            server = new CommsServerEndpoint();
+            RouterListener listener = new RouterListener(server);
+            server.registerDefaultListener(listener);
+            server.start(SERVER_ADDRESS);
+
+            SendReceiver client1 = new SendReceiver();
+            SendReceiver client2 = new SendReceiver();
+
+            client1.start();
+            client2.start();
+            client1.join();
+            client2.join();
+
+            server.stop();
+        }
+        catch (Exception e)
+        {
+            e.printStackTrace();
+            fail("testServerAndTwoClients failed");
+        }
+        finally
+        {
+            server.destroy();
+        }
+    }
 
 
 }