void _initService( const uint32_t announceMode ) { initURI(); if( !( announceMode & ANNOUNCE_ZEROCONF )) return; const bool required = announceMode & ANNOUNCE_REQUIRED; if( !servus::Servus::isAvailable( )) { if( required ) ZEQTHROW( std::runtime_error( "No zeroconf implementation available" )); return; } _service.set( "Instance", detail::Sender::getUUID().getString( )); const servus::Servus::Result& result = _service.announce( uri.getPort(), getAddress( )); if( required && !result ) { ZEQTHROW( std::runtime_error( "Zeroconf announce failed: " + result.getString( ))); } }
Impl( const URI& uri_, const std::string& session ) : detail::Sender( uri_, 0, ZMQ_PUB ) , _service( PUBLISHER_SERVICE ) , _session( session == DEFAULT_SESSION ? getDefaultSession() : session ) { if( session.empty( )) ZEROEQTHROW( std::runtime_error( "Empty session is not allowed for publisher" )); const std::string& zmqURI = buildZmqURI( uri ); if( zmq_bind( socket, zmqURI.c_str( )) == -1 ) { zmq_close( socket ); socket = 0; ZEROEQTHROW( std::runtime_error( std::string( "Cannot bind publisher socket '" ) + zmqURI + "': " + zmq_strerror( zmq_errno( )))); } initURI(); if( session != NULL_SESSION ) _initService(); }