Example #1
0
zeroeq::Event serializeJSON( const uint128_t& type, const std::string& json )
{
    const std::string& schema = getSchema( type );
    if( schema.empty( ))
        ZEROEQTHROW( std::runtime_error(
                         "JSON schema for event not registered" ));

    zeroeq::Event event( type );
    flatbuffers::Parser& parser = event.getParser();
    if( !parser.Parse( schema.c_str( )) || !parser.Parse( json.c_str( )))
        ZEROEQTHROW( std::runtime_error( parser.error_ ));
    return event;
}
Example #2
0
std::string deserializeJSON( const zeroeq::Event& event )
{
    const std::string& schema = getSchema( event.getType( ));
    if( schema.empty( ))
        ZEROEQTHROW( std::runtime_error(
                         "JSON schema for event not registered" ));

    flatbuffers::Parser parser;
    if( !parser.Parse( schema.c_str( )))
        ZEROEQTHROW( std::runtime_error( parser.error_ ));

    std::string json;
    flatbuffers::GeneratorOptions opts;
    opts.base64_byte_array = true;
    opts.strict_json = true;
    GenerateText( parser, event.getData(), opts, &json );
    return json;
}
Example #3
0
    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();
    }
Example #4
0
    void _initService()
    {
        if( !servus::Servus::isAvailable( ))
        {
            ZEROEQTHROW( std::runtime_error(
                             "No zeroconf implementation available" ));
            return;
        }

        _service.set( KEY_INSTANCE, detail::Sender::getUUID().getString( ));
        _service.set( KEY_USER, getUserName( ));
        _service.set( KEY_APPLICATION, _getApplicationName( ));
        if( !_session.empty( ))
            _service.set( KEY_SESSION, _session );

        const servus::Servus::Result& result =
            _service.announce( uri.getPort(), getAddress( ));

        if( !result )
        {
            ZEROEQTHROW( std::runtime_error( "Zeroconf announce failed: " +
                                             result.getString( )));
        }
    }