zhelpers.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008 #ifndef __ZHELPERS_H_INCLUDED__
00009 #define __ZHELPERS_H_INCLUDED__
00010
00011
00012
00013 #include <zmq.h>
00014
00015 #include <stdint.h>
00016 #include <stdio.h>
00017 #include <stdlib.h>
00018 #include <stdarg.h>
00019 #include <string.h>
00020
00021 #if (defined (WIN32))
00022 # include <time.h>
00023 #else
00024 # include <sys/time.h>
00025 #endif
00026
00027 #include <assert.h>
00028 #include <signal.h>
00029
00030
00031 #if ZMQ_VERSION_MAJOR == 2
00032 # error "Please upgrade to ZeroMQ/3.2 for these examples"
00033 #endif
00034
00035
00036 #if (defined (WIN32))
00037 # define randof(num) (int) ((float) (num) * rand () / (RAND_MAX + 1.0))
00038 #else
00039 # define randof(num) (int) ((float) (num) * random () / (RAND_MAX + 1.0))
00040 #endif
00041
00042
00043
00044
00045
00046 static char *
00047 s_recv (void *socket) {
00048 char buffer [256];
00049 int size = zmq_recv (socket, buffer, 255, 0);
00050 if (size == -1)
00051 return NULL;
00052 if (size > 255)
00053 size = 255;
00054 buffer [size] = 0;
00055 return strdup (buffer);
00056 }
00057
00058
00059 static int
00060 s_send (void *socket, char *string) {
00061 int size = zmq_send (socket, string, strlen (string), 0);
00062 return size;
00063 }
00064
00065
00066 static int
00067 s_sendmore (void *socket, char *string) {
00068 int size = zmq_send (socket, string, strlen (string), ZMQ_SNDMORE);
00069 return size;
00070 }
00071
00072
00073
00074 static void
00075 s_dump (void *socket)
00076 {
00077 puts ("----------------------------------------");
00078 while (1) {
00079
00080 zmq_msg_t message;
00081 zmq_msg_init (&message);
00082 int size = zmq_msg_recv (&message, socket, 0);
00083
00084
00085 char *data = (char*)zmq_msg_data (&message);
00086 int is_text = 1;
00087 int char_nbr;
00088 for (char_nbr = 0; char_nbr < size; char_nbr++)
00089 if ((unsigned char) data [char_nbr] < 32
00090 || (unsigned char) data [char_nbr] > 127)
00091 is_text = 0;
00092
00093 printf ("[%03d] ", size);
00094 for (char_nbr = 0; char_nbr < size; char_nbr++) {
00095 if (is_text)
00096 printf ("%c", data [char_nbr]);
00097 else
00098 printf ("%02X", (unsigned char) data [char_nbr]);
00099 }
00100 printf ("\n");
00101
00102 int64_t more;
00103 more = 0;
00104 size_t more_size = sizeof (more);
00105 zmq_getsockopt (socket, ZMQ_RCVMORE, &more, &more_size);
00106 zmq_msg_close (&message);
00107 if (!more)
00108 break;
00109 }
00110 }
00111
00112
00113
00114 static void
00115 s_set_id (void *socket)
00116 {
00117 char identity [10];
00118 sprintf (identity, "%04X-%04X", randof (0x10000), randof (0x10000));
00119 zmq_setsockopt (socket, ZMQ_IDENTITY, identity, strlen (identity));
00120 }
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139 static int64_t
00140 s_clock (void)
00141 {
00142 #if (defined (WIN32))
00143 SYSTEMTIME st;
00144 GetSystemTime (&st);
00145 return (int64_t) st.wSecond * 1000 + st.wMilliseconds;
00146 #else
00147 struct timeval tv;
00148 gettimeofday (&tv, NULL);
00149 return (int64_t) (tv.tv_sec * 1000 + tv.tv_usec / 1000);
00150 #endif
00151 }
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174 #endif // __ZHELPERS_H_INCLUDED__