Esempio n. 1
0
// 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;
}
Esempio n. 2
0
///
//  Create an empty (zero-sized) frame
QmlZframe *QmlZframeAttached::newEmpty () {
    QmlZframe *retQ_ = new QmlZframe ();
    retQ_->self = zframe_new_empty ();
    return retQ_;
};
Esempio n. 3
0
///
//  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_;
}
Esempio n. 5
0
///
//  Create an empty (zero-sized) frame
QZframe* QZframe::newEmpty (QObject *qObjParent)
{
    return new QZframe (zframe_new_empty (), qObjParent);
}
Esempio n. 6
0
File: qzmq.c Progetto: jaeheum/qzmq
Z K0(zframeempty){zframe_t*f=zframe_new_empty(); P(f, ptr(f)); RZ;}
Esempio n. 7
0
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.");
}
Esempio n. 8
0
///
//  Create an empty (zero-sized) frame
QmlZframe *QmlZframeAttached::constructEmpty () {
    QmlZframe *qmlSelf = new QmlZframe ();
    qmlSelf->self = zframe_new_empty ();
    return qmlSelf;
};