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); }
static void pass_stream_message_to_app (client_t *self) { zstr_sendm (self->msgpipe, "STREAM DELIVER"); zsock_bsend (self->msgpipe, "sssp", mlm_proto_address (self->message), mlm_proto_sender (self->message), mlm_proto_subject (self->message), mlm_proto_get_content (self->message)); }
static void pass_mailbox_message_to_app (client_t *self) { zstr_sendm (self->msgpipe, "MAILBOX DELIVER"); zsock_bsend (self->msgpipe, "ssssp", mlm_proto_sender (self->message), mlm_proto_address (self->message), mlm_proto_subject (self->message), mlm_proto_tracker (self->message), mlm_proto_get_content (self->message)); }
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"); } }