static void check_status_code (client_t *self) { if (xrap_traffic_status_code (self->message) == XRAP_TRAFFIC_COMMAND_INVALID) engine_set_next_event (self, command_invalid_event); else engine_set_next_event (self, other_event); }
static void check_status_code (client_t *self) { if (wap_proto_status (self->message) == WAP_PROTO_COMMAND_INVALID) engine_set_next_event (self, command_invalid_event); else engine_set_next_event (self, other_event); }
static void send_response (client_t *self) { if (self->rc == 0) engine_set_next_event (self, ok_event); else engine_set_next_event (self, fail_event); self->rc = 0; }
static void open_pipe_reader (client_t *self) { assert (self->pipe); if (pipe_attach_local_reader (self->pipe, self) == 0) { zsys_info ("open local reader"); engine_set_next_event (self, ok_event); } else engine_set_next_event (self, error_event); }
static void get_next_tuple (client_t *self) { tuple_t *tuple = (tuple_t *) zhashx_next (self->server->tuples); if (tuple) { zgossip_msg_set_key (self->message, tuple->key); zgossip_msg_set_value (self->message, tuple->value); engine_set_next_event (self, ok_event); } else engine_set_next_event (self, finished_event); }
static void s_replay_execute (client_t *self, replay_t *replay) { if (replay) { if (streq (replay->name, "XRAP OFFER")) { engine_set_next_event (self, set_handler_event); xrap_traffic_set_method (self->message, replay->method); xrap_traffic_set_route (self->message, replay->route); } } else engine_set_next_event (self, replay_ready_event); }
static void process_write_request (client_t *self) { if (self->pipe == NULL) engine_set_next_event (self, pipe_shut_event); else if (pipe_accepts_data (self->pipe)) engine_set_next_event (self, have_reader_event); else if (zpipes_msg_timeout (self->request)) engine_set_wakeup_event (self, zpipes_msg_timeout (self->request), wakeup_event); // // or else wait until a reader arrives }
static void check_for_mailbox_messages (client_t *self) { if (*self->address) { zsock_send (self->server->mailbox, "ss", "QUERY", self->address); // TODO: break into async reply back to server with client // ID number that server can route to correct client, if it // exists... we need some kind of internal async messaging // to cover all different cases // - engine_send_event (client, event, args) // - stream return // - mailbox to client // - service request to client // -> can each client have a DEALER socket? // -> lookup/route on client unique name? // -> server/client path? centralized for process? // -> do we need lookup, or can we use ROUTER sockets? // -> perhaps using ID? // <<general model for internal messaging>> // requirements, route by name, detect lost route? // credit based flow control // can send mlm_msg_t's all over the place zsock_recv (self->server->mailbox, "p", &self->msg); if (self->msg) engine_set_next_event (self, mailbox_message_event); } }
static void process_read_request (client_t *self) { if (zpipes_msg_size (self->request) == 0) engine_set_next_event (self, zero_read_event); else if (zlist_size (self->queue)) engine_set_next_event (self, have_data_event); else if (!self->pipe) // Read on closed pipe returns READ END engine_set_next_event (self, pipe_shut_event); else if (zpipes_msg_timeout (self->request)) engine_set_wakeup_event ( self, zpipes_msg_timeout (self->request), wakeup_event); // // or else wait until a writer has data for us }
static void handle_connect_error (client_t *self) { engine_set_next_event(self, destructor_event); }