Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Publisher ----------
- #include "zhelpers.h"
- int main () {
- // Prepare our context and publisher
- void *context = zmq_init (1);
- void *publisher = zmq_socket (context, ZMQ_PUB);
- zmq_bind (publisher, "tcp://*:5556");
- zmq_bind (publisher, "ipc://weather.ipc");
- // Initialize random number generator
- srandom ((unsigned) time (NULL));
- while (1) {
- // Get values that will fool the boss
- int zipcode, temperature, relhumidity;
- zipcode = within (100000);
- temperature = within (215) - 80;
- relhumidity = within (50) + 10;
- // Send message to all subscribers
- char update [20];
- sprintf (update, "%05d %d %d", zipcode, temperature, relhumidity);
- s_send (publisher, update);
- }
- zmq_close (publisher);
- zmq_term (context);
- return 0;
- }
- Subscriber --------------
- #include "zhelpers.h"
- int main (int argc, char *argv[])
- {
- void *context = zmq_init (1);
- // Socket to talk to server
- printf ("Collecting updates from weather server...\n");
- void *subscriber = zmq_socket (context, ZMQ_SUB);
- zmq_connect (subscriber, "tcp://localhost:5556");
- // Subscribe to zipcode, default is NYC, 10001
- char *filter = (argc > 1)? argv [1]: "10001 ";
- zmq_setsockopt (subscriber, ZMQ_SUBSCRIBE, filter, strlen (filter));
- while(1)
- {
- // Process 100 updates
- int update_nbr;
- long total_temp = 0;
- for (update_nbr = 0; update_nbr < 100; update_nbr++) {
- char *string = s_recv (subscriber);
- int zipcode, temperature, relhumidity;
- sscanf (string, "%d %d %d",
- &zipcode, &temperature, &relhumidity);
- total_temp += temperature;
- free (string);
- }
- printf ("Average temperature for zipcode '%s' was %dF\n",
- filter, (int) (total_temp / update_nbr));
- }
- zmq_close (subscriber);
- zmq_term (context);
- return 0;
- }
Add Comment
Please, Sign In to add comment