// // Weather update server in C++ // Binds PUB socket to tcp://*:5556 // Publishes random weather updates // // Olivier Chamoux // #include #include #include #include #include #include #include #include #include #include "chunk.h" #include "timeUtils.h" using namespace std; int main () { // Prepare our context and publisher zmq::context_t context (1); zmq::socket_t publisher (context, ZMQ_PUB); publisher.bind("tcp://0.0.0.0:123458"); char c[2]; WireChunk* chunk = new WireChunk(); timeval tvChunk; gettimeofday(&tvChunk, NULL); long nextTick = getTickCount(); cin.sync(); while (cin.good()) { for (size_t n=0; (npayload[n] = (int)c[0] + ((int)c[1] << 8); } // if (!cin.good()) // cin.clear(); chunk->tv_sec = tvChunk.tv_sec; chunk->tv_usec = tvChunk.tv_usec; zmq::message_t message(sizeof(WireChunk)); memcpy(message.data(), chunk, sizeof(WireChunk)); publisher.send(message); addMs(tvChunk, WIRE_CHUNK_MS); nextTick += WIRE_CHUNK_MS; long currentTick = getTickCount(); if (nextTick > currentTick) { usleep((nextTick - currentTick) * 1000); } else { cin.sync(); gettimeofday(&tvChunk, NULL); nextTick = getTickCount(); } } delete chunk; return 0; }