static void s_service_internal (broker_t *self, char *service_name, zmsg_t *msg) { if (streq (service_name, "mmi.service")) { service_t *service = (service_t *) zhash_lookup (self->services, zmsg_body (msg)); if (service && service->workers) zmsg_body_set (msg, "200"); else zmsg_body_set (msg, "404"); } else zmsg_body_set (msg, "501"); // Remove & save client return envelope and insert the // protocol header and service name, then rewrap envelope. char *client = zmsg_unwrap (msg); zmsg_wrap (msg, MDPC_CLIENT, service_name); zmsg_wrap (msg, client, ""); free (client); zmsg_send (&msg, self->socket); }
// Worker using REQ socket to do LRU routing // static void * worker_thread (void *context) { void *worker = zmq_socket (context, ZMQ_REQ); s_set_id (worker); // Makes tracing easier zmq_connect (worker, "ipc://backend.ipc"); // Tell broker we're ready for work s_send (worker, "READY"); while (1) { zmsg_t *zmsg = zmsg_recv (worker); printf ("Worker: %s\n", zmsg_body (zmsg)); zmsg_body_set (zmsg, "OK"); zmsg_send (&zmsg, worker); } return (NULL); }