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;
}
Пример #2
0
Broker::Broker( const std::string& name, Receiver& receiver,
                const PortSelection mode )
    : Receiver( receiver )
    , _impl( new detail::Broker( name, receiver, mode, getZMQContext( )))
{
}
Пример #3
0
Broker::Broker( const std::string& address, Receiver& receiver )
    : Receiver( receiver )
    , _impl( new detail::Broker( receiver, address, getZMQContext( )))
{
}