javacommons/comms/tsrc/src/sendreceive.cpp
changeset 87 1627c337e51e
parent 21 2a9601315dfc
equal deleted inserted replaced
80:d6dafc5d983f 87:1627c337e51e
   408     CHECK(!con.send(msg));
   408     CHECK(!con.send(msg));
   409 
   409 
   410     monitor->wait();
   410     monitor->wait();
   411     CHECK(!con.disconnect());
   411     CHECK(!con.disconnect());
   412 }
   412 }
       
   413 
       
   414 
       
   415 /**
       
   416  * Test sendReceive with two clients
       
   417  * 1. server replies to first message after second message is received
       
   418  *    (and two clients use sendReceive to send single messsage)
       
   419  */
       
   420 class RoutingListener : public CommsListener
       
   421 {
       
   422 public:
       
   423     RoutingListener(CommsEndpoint& aComms) : mComms(aComms), mMsgCount(0) {}
       
   424 
       
   425     virtual void processMessage(CommsMessage& aMessage)
       
   426     {
       
   427         if (mMsgCount == 0)
       
   428         {
       
   429             // delay reply until second message is received
       
   430             mFirstMessage = aMessage;
       
   431         }
       
   432         else
       
   433         {
       
   434             // reply to first client
       
   435             CommsMessage reply;
       
   436             reply.replyTo(mFirstMessage);
       
   437             mComms.send(reply);
       
   438 
       
   439             // reply to second client
       
   440             reply.replyTo(aMessage);
       
   441             mComms.send(reply);
       
   442         }
       
   443         mMsgCount++;
       
   444     }
       
   445 private:
       
   446     CommsMessage mFirstMessage;
       
   447     int mMsgCount;
       
   448     CommsEndpoint& mComms;
       
   449 };
       
   450 
       
   451 void doSendReceive()
       
   452 {
       
   453     CommsClientEndpoint con;
       
   454     CHECK(!con.connect(IPC_ADDRESS_COMMS_MODULE_TEST + 1));
       
   455     CommsMessage msg;
       
   456     CommsMessage receivedMsg;
       
   457     CHECK(!con.sendReceive(msg, receivedMsg, WAIT_FOR_EVER));
       
   458     CHECK(!con.disconnect());
       
   459 }
       
   460 
       
   461 void* clientSendReceiveThread(void*)
       
   462 {
       
   463     doSendReceive();
       
   464     return 0;
       
   465 }
       
   466 
       
   467 TEST(SendReceive, twoClientsAndServer)
       
   468 {
       
   469     CommsServerEndpoint server;
       
   470     RoutingListener listener(server);
       
   471     CHECK(!server.registerDefaultListener(&listener));
       
   472     CHECK(!server.start(IPC_ADDRESS_COMMS_MODULE_TEST + 1));
       
   473 
       
   474     pthread_t thread1;
       
   475     pthread_t thread2;
       
   476     pthread_create(&thread1, 0, &clientSendReceiveThread, 0);
       
   477     pthread_create(&thread2, 0, &clientSendReceiveThread, 0);
       
   478     pthread_join(thread1, 0);
       
   479     pthread_join(thread2, 0);
       
   480 
       
   481     server.stop();
       
   482 }