test-zmq-weather-client.nut 1.1 KB

1234567891011121314151617181920212223242526272829303132333435
  1. //
  2. // Weather update client
  3. // Connects SUB socket to tcp://localhost:5556
  4. // Collects weather updates and finds avg temp in zipcode
  5. //
  6. // Author: Robert G. Jakabosky <[email protected]>
  7. //
  8. local context = zmq_ctx();
  9. print(__LINE__, context);
  10. // Socket to talk to server
  11. print("Collecting updates from weather server...");
  12. local subscriber = context.socket(zmq_socket.SUB);
  13. print(__LINE__, subscriber);
  14. print(__LINE__, subscriber.connect( vargv.len() > 1 ? vargv[1] : "tcp://localhost:5556"));
  15. // Subscribe to zipcode, default is NYC, 10001
  16. local filter = vargv.len() > 0 ? vargv[0] : "10001 ";
  17. print(__LINE__, subscriber.setsockopt(zmq_socket.SUBSCRIBE, filter));
  18. // Process 100 updates
  19. local update_nbr = 0;
  20. local total_temp = 0;
  21. for(local n=0; n < 100; ++n){
  22. local message = subscriber.recv();
  23. print(message);
  24. message.gmatch("([%d-]*) ([%d-]*) ([%d-]*)", function(zipcode, temperature, relhumidity){
  25. total_temp += temperature.tointeger();
  26. ++update_nbr;
  27. });
  28. }
  29. print(format("Average temperature for zipcode '%s' was %dF, total = %d", filter, (total_temp / update_nbr), total_temp));
  30. subscriber.close();
  31. context.destroy();