Advertisement
Guest User

zeromq_handler.d

a guest
Nov 19th, 2013
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
D 2.05 KB | None | 0 0
  1. import core.thread;
  2. import deimos.zmq.zmq;
  3. import std.string;
  4. import std.stdio;
  5. import std.c.string;
  6.  
  7. class ZeroMQ : Thread
  8. {
  9.     private:
  10.         static void* _context;
  11.         void* _responder;
  12.     protected:
  13.         @property
  14.         void *responder() nothrow
  15.         {
  16.             return this._responder;
  17.         }
  18.  
  19.         @property
  20.         void responder(void *responder) nothrow
  21.         {
  22.             if (this.responder != null)
  23.                 zmq_close(this.responder);
  24.             this._responder = responder;
  25.         }
  26.        
  27.         void run()
  28.         {
  29.             while(1)
  30.             {
  31.                 char buffer[10];
  32.                 int rc = zmq_recv(this.responder, cast(void*)buffer, 10, 0);
  33.                 debug {
  34.                     char *errorp = zmq_strerror(zmq_errno());
  35.                     string error_str = cast(string)errorp[0..strlen(errorp)];
  36.                     if (rc < 0)
  37.                         writefln("Error: %s", error_str);
  38.                 }
  39.                 writefln("Received: %s\n", buffer);
  40.                 zmq_send(responder, toStringz("World"), 6, 0);
  41.             }
  42.         }  
  43.                
  44.     public:
  45.         this()  
  46.         {      
  47.             this._responder = null;
  48.             super( &run );
  49.         }
  50.        
  51.         void initialize()
  52.         {
  53.             this.responder = zmq_socket(this.context, ZMQ_REP);
  54.             int rc = zmq_bind(this.responder, "tcp://*:5555".ptr);
  55.             assert(rc == 0);
  56.         }
  57.  
  58.         static this()
  59.         {
  60.             this._context = zmq_init(1);
  61.             int major, minor, patch;
  62.             zmq_version(&major, &minor, &patch);
  63.             writefln("%d.%d.%d", major, minor, patch);
  64.         }
  65.  
  66.         @property
  67.         static void* context() nothrow
  68.         {
  69.             return this._context;
  70.         }
  71.  
  72.         @property
  73.         static void context(void* aContext) nothrow
  74.         {
  75.             if (this.context != null)
  76.                 zmq_term(this.context);
  77.             this._context = aContext;
  78.         }
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement