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 } |