From afe51e924f030d378c93279a40f9e1a9a91d4d34 Mon Sep 17 00:00:00 2001 From: Dan Buch Date: Sat, 17 Mar 2012 10:22:25 -0400 Subject: [PATCH] Filling in the weather update client --- zeromq/.gitignore | 1 + zeromq/Makefile | 2 +- zeromq/wuclient.c | 30 ++++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+), 1 deletion(-) create mode 100644 zeromq/wuclient.c diff --git a/zeromq/.gitignore b/zeromq/.gitignore index b101c65..1549294 100644 --- a/zeromq/.gitignore +++ b/zeromq/.gitignore @@ -1,3 +1,4 @@ hwserver hwclient wuserver +wuclient diff --git a/zeromq/Makefile b/zeromq/Makefile index 5ca1d7d..4fcd961 100644 --- a/zeromq/Makefile +++ b/zeromq/Makefile @@ -7,7 +7,7 @@ LIBZMQ := /usr/local/lib/libzmq.a $(CC) $(CFLAGS) -o $@ $^ $(LIBZMQ) $(LDFLAGS) -all: hwserver hwclient wuserver +all: hwserver hwclient wuserver wuclient .PHONY: all diff --git a/zeromq/wuclient.c b/zeromq/wuclient.c new file mode 100644 index 0000000..d4acb33 --- /dev/null +++ b/zeromq/wuclient.c @@ -0,0 +1,30 @@ +#include "zhelpers.h" + +int main(int argc, char *argv[]) +{ + void *context = zmq_init(1); + + 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)); + + 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; +}