Example #1
0
static void
s_service_dispatch (service_t *self)
{
    //  for each message, check regexp and dispatch if possible
    if (zlistx_size (self->offers)) {
        mlm_msg_t *message = mlm_msgq_first (self->queue);
        while (message) {
            mlm_msg_link(message);
            if (s_service_dispatch_message (self, message))
                mlm_msgq_dequeue_cursor (self->queue);
            mlm_msg_unlink(&message);
            message = mlm_msgq_next (self->queue);
        }
    }
}
Example #2
0
static int
s_stream_engine_handle_message (stream_engine_t *self)
{
    void *sender;
    mlm_msg_t *msg;
    zsock_brecv (self->msgpipe, "pp", &sender, &msg);

    selector_t *selector = (selector_t *) zlistx_first (self->selectors);
    while (selector) {
        if (zrex_matches (selector->rex, mlm_msg_subject (msg))) {
            void *client = zlistx_first (selector->clients);
            while (client) {
                if (client != sender)
                    zsock_bsend (self->msgpipe, "pp", client, mlm_msg_link (msg));
                client = zlistx_next (selector->clients);
            }
        }
        selector = (selector_t *) zlistx_next (self->selectors);
    }
    mlm_msg_unlink (&msg);
    return 0;
}
Example #3
0
int
mlm_msg_test (bool verbose)
{
    printf (" * mlm_msg: ");

    //  @selftest
    //  Simple create/destroy test
    mlm_msg_t *self = mlm_msg_new (
        "sender", "address", "subject", "tracker", 0, zmsg_new ());
    assert (self);
    mlm_msg_destroy (&self);

    //  Test reference counting
    self = mlm_msg_new (
        "sender", "address", "subject", "tracker", 0, zmsg_new ());
    mlm_msg_t *copy = mlm_msg_link (self);
    mlm_msg_unlink (&copy);
    mlm_msg_unlink (&self);
    //  @end
    printf ("OK\n");
    return 0;
}