broker_t * broker_new (const char *contexts_uri, const char *executors_uri) { broker_t *self = (broker_t *) malloc (sizeof (broker_t)); assert (self); printf ("[BROKER] binding to frontend %s\n", contexts_uri); self->contexts = zsock_new_router (contexts_uri); assert(self->contexts); printf ("[BROKER] binding to backend %s\n", executors_uri); self->executors = zsock_new_router (executors_uri); assert (self->executors); zsock_set_router_mandatory (self->executors, true); // Only poll on executors until we have executors available. self->poller = zpoller_new (self->executors, NULL); assert (self->poller); self->executor_lb = zlist_new (); assert (self->executor_lb); self->backlog = zlist_new (); assert (self->backlog); return self; }
JNIEXPORT jlong JNICALL Java_org_zeromq_czmq_Zsock__1_1newRouter (JNIEnv *env, jclass c, jstring endpoint) { char *endpoint_ = (char *) (*env)->GetStringUTFChars (env, endpoint, NULL); jlong new_router_ = (jlong) (intptr_t) zsock_new_router (endpoint_); (*env)->ReleaseStringUTFChars (env, endpoint, endpoint_); return new_router_; }
/// // Create a ROUTER socket. Default action is bind. QZsock* QZsock::newRouter (const QString &endpoint, QObject *qObjParent) { return new QZsock (zsock_new_router (endpoint.toUtf8().data()), qObjParent); }
Z K1(zsocknewrouter){R ptr(zsock_new_router(xs));}
/// // Create a ROUTER socket. Default action is bind. QmlZsock *QmlZsockAttached::constructRouter (const QString &endpoint) { QmlZsock *qmlSelf = new QmlZsock (); qmlSelf->self = zsock_new_router (endpoint.toUtf8().data()); return qmlSelf; };
void WorkerAgent::actorTask(zsock_t *pipe, void *args) { assert(pipe); assert(args); const WorkerAgent &agent = *static_cast<WorkerAgent *>(args); const auto worker = detail::makeSock(zsock_new_router(agent._localEndpoint.c_str())); assert(worker.get()); const auto poller = detail::makePoller(zpoller_new(pipe, worker.get(), nullptr)); assert(poller.get()); int rc = zsock_signal(pipe, 0); UNUSED(rc); assert(rc == 0); bool terminated = false; while (!terminated && !zsys_interrupted) { zsock_t *sock = static_cast<zsock_t *>(zpoller_wait(poller.get(), -1)); if (sock == pipe) { std::unique_ptr<char> command(zstr_recv(sock)); if (streq(command.get(), "$TERM")) { terminated = true; } } else if (sock == worker.get()) { auto request = detail::makeMsg(zmsg_recv(sock)); assert(zmsg_size(request.get()) == 3); auto identity = detail::makeFrame(zmsg_pop(request.get())); auto id = detail::makeFrame(zmsg_pop(request.get())); static const auto respond = []( auto &&identity, auto &&id, const char *status, auto &&data, zsock_t *sock) { zmsg_t *response = zmsg_new(); // Identity for ROUTER zframe_t *f = identity.release(); zmsg_append(response, &f); // Caller local ID f = id.release(); zmsg_append(response, &f); // Status f = zframe_new(status, std::strlen(status)); zmsg_append(response, &f); // Result f = data.release(); zmsg_append(response, &f); zmsg_send(&response, sock); }; try { auto argsFrame = detail::makeFrame(zmsg_pop(request.get())); msgpack::unpacked msg; msgpack::unpack( &msg, reinterpret_cast<const char *>(zframe_data(argsFrame.get())), zframe_size(argsFrame.get())); msgpack::sbuffer sbuf; agent._callback(msg, sbuf); auto resultFrame = detail::makeFrame(zframe_new(sbuf.data(), sbuf.size())); respond(identity, id, "", resultFrame, sock); } catch (const msgpack::type_error &e) { respond(identity, id, "I", detail::makeFrame(zframe_new_empty()), sock); } catch (const InvalidArgument &e) { respond(identity, id, "I", detail::makeFrame(zframe_new_empty()), sock); } catch (const UndefinedReference &e) { respond(identity, id, "U", detail::makeFrame(zframe_new_empty()), sock); } catch (const NetworkError &e) { respond(identity, id, "N", detail::makeFrame(zframe_new_empty()), sock); } catch (...) { respond(identity, id, "?", detail::makeFrame(zframe_new_empty()), sock); } } } zsys_debug("Cleaned up worker agent."); }
/// // Create a ROUTER socket. Default action is bind. QmlZsock *QmlZsockAttached::newRouter (const QString &endpoint) { QmlZsock *retQ_ = new QmlZsock (); retQ_->self = zsock_new_router (endpoint.toUtf8().data()); return retQ_; };