// Weather update server // Binds PUB socket to tcp://*:5556 // Publishes random weather updates #include <zmq.h> #include <assert.h> #include <time.h> #include <dirent.h> #include "utils.h" // Global: char *__logdir; int __loginterval; int main (int argc, char *argv []) { if(argc != 3){ printf("Usage: %s <abslogdir> <loginterval>",argv[0]); exit(1); } //----- Init global variables __logdir=argv[1]; __loginterval=atoi(argv[2]); //----- Start publisher DIR *dr = opendir(__logdir); struct dirent *de; // Pointer for directory entry for(int i=0;i<=0;i++){ int interval=INTERVAL(__loginterval); int interval_next=INTERVAL_NEXT(__loginterval); while ((de = readdir(dr)) != NULL){ if(strcmp(de->d_name,".") && strcmp(de->d_name,"..")){ char *client=de->d_name; char logfile[255]; char logfile_next[255]; sprintf(logfile,"%s/%s/%ld",__logdir,client,interval); sprintf(logfile_next,"%s/%s/%ld",__logdir,client,interval_next); // As long as next logfile is not available, we should wait // for sending the current one printf("Waiting for %s...%s\n",client,logfile_next); while(!FILE_EXISTS(logfile_next)){ sleep(1); } // Send current one if(FILE_EXISTS(logfile)){ printf("Sending....\n"); } } } } closedir(dr); return 0; // Prepare our context and publisher void *context = zmq_ctx_new (); void *publisher = zmq_socket (context, ZMQ_PUB); int rc = zmq_bind (publisher, "tcp://*:"STRINGIFY(PUBLISHER_PORT)); assert (rc == 0); // Initialize random number generator while (1) { zmq_send (publisher, "Hello World", 5, 0); printf("AA\n"); } zmq_close (publisher); zmq_ctx_destroy (context); return 0; }