1 /** 2 Nanomsg Example: ReqRep 3 */ 4 module nanomsg.examples.reqrep; 5 6 import std.stdio; 7 import std.conv; 8 import std.datetime; 9 import core.thread; 10 import nanomsg; 11 12 /// 13 string date () 14 { 15 return Clock.currTime.toSimpleString(); 16 } 17 18 /// 19 enum NODE0="node0"; 20 /// 21 enum NODE1="node1"; 22 /// 23 enum DATE="DATE"; 24 25 /// 26 int node0(string surl) 27 { 28 char* url=cast(char*)surl; 29 int sz_date = cast(int)DATE.length+1; 30 int sock = nn_socket (AF_SP, NN_REP); 31 assert (sock >= 0); 32 assert (nn_bind (sock, url) >= 0); 33 while (1) 34 { 35 char *buf = cast(char*)0; 36 int bytes = nn_recv(sock, &buf, NN_MSG, 0); 37 assert (bytes >= 0); 38 if (to!string(buf)==DATE) 39 { 40 writefln("NODE0: RECEIVED DATE REQUEST"); 41 auto d=date(); 42 int sz_d = cast(int)d.length + 1; // '\0' too 43 writefln("NODE0: SENDING DATE %s", d); 44 bytes = nn_send (sock, cast(char*)d, sz_d, 0); 45 assert (bytes == sz_d); 46 } 47 nn_freemsg (buf); 48 } 49 return nn_shutdown (sock, 0); 50 } 51 52 53 /// 54 int node1 (string url) 55 { 56 int sz_date = cast(int)DATE.length+1; 57 char *buf = cast(char*)0; 58 int bytes = -1; 59 int sock = nn_socket (AF_SP, NN_REQ); 60 assert (sock >= 0); 61 assert (nn_connect (sock, cast(char*)url) >= 0); 62 writefln("NODE1: SENDING DATE REQUEST %s", DATE); 63 bytes = nn_send (sock, cast(char*)DATE, sz_date, 0); 64 assert (bytes == sz_date); 65 bytes = nn_recv (sock, &buf, NN_MSG, 0); 66 assert (bytes >= 0); 67 writefln("NODE1: RECEIVED DATE %s", to!string(buf), bytes); 68 nn_freemsg (buf); 69 return nn_shutdown (sock, 0); 70 } 71 72 73 /// 74 int main(string[] argv) 75 { 76 if (argv.length>1) 77 if (argv[1]==NODE0) 78 return node0(argv[2]); 79 if (argv.length>1) 80 if (argv[1]==NODE1) 81 return node1(argv[2]); 82 writefln("Usage: reqrep %s|%s <URL> <ARG> ...'",NODE0, NODE1); 83 return 1; 84 } 85