Advertisement
staticfloat

ZMQ REQ<-->ROUTER

Dec 12th, 2011
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.10 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <zmq.hpp>
  4. #include <list>
  5. #include <stdlib.h>
  6. #include <time.h>
  7.  
  8.  
  9. bool checkLabel( zmq::socket_t * sock ) {
  10.     int opt;
  11.     size_t optlen = sizeof(opt);
  12.     sock->getsockopt( ZMQ_RCVLABEL, &opt, &optlen );
  13.     return opt;
  14. }
  15.  
  16. bool checkMore( zmq::socket_t * sock ) {
  17.     int opt;
  18.     size_t optlen = sizeof(opt);
  19.     sock->getsockopt( ZMQ_RCVMORE, &opt, &optlen );
  20.     return opt;
  21. }
  22.  
  23. void printMsg( zmq::message_t &msg ) {
  24.     char * data = (char *) msg.data();
  25.     for( int i=0; i<msg.size(); ++i ) {
  26.         if( isprint(data[i]) )
  27.             printf( "%c", data[i] );
  28.         else
  29.             printf( "?" );
  30.     }
  31.     printf("\n");
  32. }
  33.  
  34. int main (int argc, const char * argv[])
  35. {
  36.     zmq::context_t ctx(1);
  37.    
  38.     if( argc == 1 || strcmp( argv[1], "-s" ) != 0 ) {
  39.         //If we're in "client" mode, create a ZMQ_REQ
  40.         zmq::socket_t sock( ctx, ZMQ_REQ );
  41.         sock.connect( "tcp://127.0.0.1:5040" );
  42.        
  43.         //Send some random
  44.         char * sendAsLabel = "This is my Label";
  45.         zmq::message_t labelMsg( (void *)sendAsLabel, strlen(sendAsLabel) + 1, NULL );
  46.         sock.send( labelMsg, ZMQ_SNDLABEL );
  47.        
  48.         //Send whatever random junk is on the stack as data
  49.         char sendAsData[80];
  50.         zmq::message_t dataMsg( (void *)&sendAsData[0], sizeof(sendAsData), NULL );
  51.         sock.send( dataMsg );
  52.         usleep( 1000*1000 );
  53.     } else {
  54.         zmq::socket_t sock( ctx, ZMQ_ROUTER );
  55.        
  56.         char * addr = "tcp://127.0.0.1:5040";
  57.         sock.setsockopt( ZMQ_IDENTITY, addr, strlen(addr) );
  58.         sock.bind( addr );
  59.         while( true ) {
  60.             do {
  61.                 zmq::message_t msg;
  62.                 sock.recv( &msg );
  63.  
  64.                 if( checkLabel( &sock ) )
  65.                     printf( "LABEL [%lu] - ", msg.size() );
  66.                 else
  67.                     printf( "DATA [%lu] - ", msg.size() );
  68.                 printMsg( msg );
  69.             } while( checkMore( &sock ) );
  70.             printf( "--------------------\n" );
  71.         }
  72.     }
  73.     return 1;
  74. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement