// timer callback; updates stock data and publishes new info static int onloop (zloop_t *loop, int timer, void *arg) { // get list of stocks and publisher socket zloop_data_t *loopdata = (zloop_data_t *)arg; // for each stock ... zframe_t *frame = zframe_new_empty(); tick_t *stock = (tick_t *)zlist_first(loopdata->stocks); while (stock != NULL) { // update point-in-time data stock->timestamp = time(NULL); stock->value = revalue(stock->value); // publish point-in-time-data (each tick field is a seperate frame) // Frame 1: stock symbol (to facilitate topic filtering) frame = zframe_new(stock->symbol,strlen(stock->symbol)); zframe_send(&frame,loopdata->socket,ZFRAME_MORE); // Frame 2: timestamp of last update frame = zframe_new(&(stock->timestamp),sizeof(stock->timestamp)); zframe_send(&frame,loopdata->socket,ZFRAME_MORE); // Frame 3: actual stock value frame = zframe_new(&(stock->value),sizeof(stock->value)); zframe_send(&frame,loopdata->socket,0); stock = zlist_next(loopdata->stocks); } zframe_destroy(&frame); return 0; }
/// // Create an empty (zero-sized) frame QmlZframe *QmlZframeAttached::newEmpty () { QmlZframe *retQ_ = new QmlZframe (); retQ_->self = zframe_new_empty (); return retQ_; };
/// // Create an empty (zero-sized) frame QZframe * QZframe::newEmpty () { QZframe *rv = new QZframe (zframe_new_empty ()); return rv; }
JNIEXPORT jlong JNICALL Java_org_zeromq_czmq_Zframe__1_1newEmpty (JNIEnv *env, jclass c) { jlong new_empty_ = (jlong) (intptr_t) zframe_new_empty (); return new_empty_; }
/// // Create an empty (zero-sized) frame QZframe* QZframe::newEmpty (QObject *qObjParent) { return new QZframe (zframe_new_empty (), qObjParent); }
Z K0(zframeempty){zframe_t*f=zframe_new_empty(); P(f, ptr(f)); RZ;}
void WorkerAgent::actorTask(zsock_t *pipe, void *args) { assert(pipe); assert(args); const WorkerAgent &agent = *static_cast<WorkerAgent *>(args); const auto worker = detail::makeSock(zsock_new_router(agent._localEndpoint.c_str())); assert(worker.get()); const auto poller = detail::makePoller(zpoller_new(pipe, worker.get(), nullptr)); assert(poller.get()); int rc = zsock_signal(pipe, 0); UNUSED(rc); assert(rc == 0); bool terminated = false; while (!terminated && !zsys_interrupted) { zsock_t *sock = static_cast<zsock_t *>(zpoller_wait(poller.get(), -1)); if (sock == pipe) { std::unique_ptr<char> command(zstr_recv(sock)); if (streq(command.get(), "$TERM")) { terminated = true; } } else if (sock == worker.get()) { auto request = detail::makeMsg(zmsg_recv(sock)); assert(zmsg_size(request.get()) == 3); auto identity = detail::makeFrame(zmsg_pop(request.get())); auto id = detail::makeFrame(zmsg_pop(request.get())); static const auto respond = []( auto &&identity, auto &&id, const char *status, auto &&data, zsock_t *sock) { zmsg_t *response = zmsg_new(); // Identity for ROUTER zframe_t *f = identity.release(); zmsg_append(response, &f); // Caller local ID f = id.release(); zmsg_append(response, &f); // Status f = zframe_new(status, std::strlen(status)); zmsg_append(response, &f); // Result f = data.release(); zmsg_append(response, &f); zmsg_send(&response, sock); }; try { auto argsFrame = detail::makeFrame(zmsg_pop(request.get())); msgpack::unpacked msg; msgpack::unpack( &msg, reinterpret_cast<const char *>(zframe_data(argsFrame.get())), zframe_size(argsFrame.get())); msgpack::sbuffer sbuf; agent._callback(msg, sbuf); auto resultFrame = detail::makeFrame(zframe_new(sbuf.data(), sbuf.size())); respond(identity, id, "", resultFrame, sock); } catch (const msgpack::type_error &e) { respond(identity, id, "I", detail::makeFrame(zframe_new_empty()), sock); } catch (const InvalidArgument &e) { respond(identity, id, "I", detail::makeFrame(zframe_new_empty()), sock); } catch (const UndefinedReference &e) { respond(identity, id, "U", detail::makeFrame(zframe_new_empty()), sock); } catch (const NetworkError &e) { respond(identity, id, "N", detail::makeFrame(zframe_new_empty()), sock); } catch (...) { respond(identity, id, "?", detail::makeFrame(zframe_new_empty()), sock); } } } zsys_debug("Cleaned up worker agent."); }
/// // Create an empty (zero-sized) frame QmlZframe *QmlZframeAttached::constructEmpty () { QmlZframe *qmlSelf = new QmlZframe (); qmlSelf->self = zframe_new_empty (); return qmlSelf; };