static void write_message_to_mailbox (client_t *self) { mlm_msg_t *msg = mlm_msg_new ( self->address, mlm_proto_address (self->message), mlm_proto_subject (self->message), mlm_proto_tracker (self->message), mlm_proto_timeout (self->message), mlm_proto_get_content (self->message)); // Try to dispatch to client immediately, if it's connected client_t *target = (client_t *) zhashx_lookup ( self->server->clients, mlm_proto_address (self->message)); if (target) { assert (!target->msg); target->msg = msg; engine_send_event (target, mailbox_message_event); } else // Else store in the eponymous mailbox zsock_send (self->server->mailbox, "ssp", "STORE", mlm_proto_address (self->message), msg); }
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 (©); mlm_msg_unlink (&self); // @end printf ("OK\n"); return 0; }
static void write_message_to_service (client_t *self) { mlm_msg_t *msg = mlm_msg_new ( self->address, mlm_proto_address (self->message), mlm_proto_subject (self->message), mlm_proto_tracker (self->message), mlm_proto_timeout (self->message), mlm_proto_get_content (self->message)); service_t *service = s_service_require (self, mlm_proto_address (self->message)); assert (service); if (!s_service_dispatch_message (service, msg)) mlm_msgq_enqueue (service->queue, msg); }
static void write_message_to_stream (client_t *self) { if (self->writer) { mlm_msg_t *msg = mlm_msg_new ( self->address, self->writer->name, mlm_proto_subject (self->message), NULL, mlm_proto_timeout (self->message), mlm_proto_get_content (self->message)); zsock_bsend (self->writer->msgpipe, "pp", self, msg); } else { engine_set_exception (self, exception_event); zsys_warning ("client attempted to send without writer"); } }
static void write_message_to_stream (client_t *self) { if (self->writer) { mlm_msg_t *msg = mlm_msg_new ( self->address, self->writer->name, mlm_proto_subject (self->message), NULL, mlm_proto_timeout (self->message), mlm_proto_get_content (self->message)); zsock_bsend (self->writer->msgpipe, "pp", self, msg); } else { // TODO: we can't properly reply to a STREAM_SEND mlm_proto_set_status_code (self->message, MLM_PROTO_COMMAND_INVALID); engine_set_exception (self, exception_event); zsys_warning ("client attempted to send without writer"); } }