bool OpenEphysNetworkEventsClient::initialize() { zmqSocket.reset(zmq_socket(getZMQContext(), ZMQ_REQ)); if (!zmqSocket) { logZMQError("Unable to create ZeroMQ socket"); return false; } const int linger = 0; const int timeout = 1000; // ms if (0 != zmq_setsockopt(zmqSocket.get(), ZMQ_LINGER, &linger, sizeof(linger)) || 0 != zmq_setsockopt(zmqSocket.get(), ZMQ_RCVTIMEO, &timeout, sizeof(timeout)) || 0 != zmq_setsockopt(zmqSocket.get(), ZMQ_SNDTIMEO, &timeout, sizeof(timeout))) { logZMQError("Unable to set ZeroMQ socket timeouts"); return false; } if (0 != zmq_connect(zmqSocket.get(), endpoint.c_str())) { logZMQError("Unable to connect to Open Ephys network events module"); return false; } boost::weak_ptr<OpenEphysNetworkEventsClient> weakThis(component_shared_from_this<OpenEphysNetworkEventsClient>()); auto notification = [weakThis](const Datum &data, MWTime time) { if (auto sharedThis = weakThis.lock()) { if (data.isString()) { sharedThis->sendRequest(data.getString()); } else { sharedThis->sendRequest(data.toString()); } } }; request->addNotification(boost::make_shared<VariableCallbackNotification>(notification)); return true; }
Broker::Broker( const std::string& name, Receiver& receiver, const PortSelection mode ) : Receiver( receiver ) , _impl( new detail::Broker( name, receiver, mode, getZMQContext( ))) { }
Broker::Broker( const std::string& address, Receiver& receiver ) : Receiver( receiver ) , _impl( new detail::Broker( receiver, address, getZMQContext( ))) { }