Response MarketSession::executeProtobuf(Request request)
{
    QByteArray requestBytes(request.SerializeAsString().c_str(),request.ByteSize());
    QByteArray responseBytes;
    if(!context.issecure())
        responseBytes = executeRawHttpQuery(requestBytes);
    else
        responseBytes = executeRawHttpsQuery(requestBytes);
    Response r;
    r.ParseFromArray(responseBytes.constData(),responseBytes.size());

    return r;
}
Example #2
0
inline void cpp_handler_wrapper<Response>::operator()(
    const rpc_error* error, const void* data, size_t size) {
  if (cpp_handler_.empty())
    return;  // ignore error and message

  Response resp;
  if (error) {
    cpp_handler_(error, resp);
    return;
  }
  BOOST_ASSERT(data);
  if (resp.ParseFromArray(data, size)) {
    cpp_handler_(NULL, resp);
    return;
  }

  // invalid message
  rpc_error e(error_code::INVALID_MESSAGE, "");
  cpp_handler_(&e, resp);
}  // operator()()
Example #3
0
    int f(ptime time, int dt) {
        NF *f = new NF;
        f->set_dt(dt);
        f->set_allocated_current_time(ptime_to_DataTime(time));
        assert(f->IsInitialized());

        Call c;
        c.set_type(Call::N_F);
        c.set_allocated_n_f(f);
        assert(c.IsInitialized());

        std::string buf = c.SerializeAsString();
        zmq::message_t req((void*) buf.data(), buf.length(), 0);

        socket.send(req);
        zmq::message_t resp;
        socket.recv(&resp);

        Response r;
        r.ParseFromArray(resp.data(), resp.size());
        assert(r.type() == Call::N_F);
        return r.n_f();
    }
Example #4
0
bool PbSession::parse(Response& response) const
{
    error_.clear();

    PbHeader hdr;
    if( !parse(hdr) )
        return false;

    if( !response.ParseFromArray(cache_->data()+sizeof(hdr), hdr.bufsize) ) {
        error_ = "Protobuf parsing error (analysis under debug only).";
        qDebug() << "Protobuf parsing error: " << response.DebugString().c_str();
        return false;
    }

    qint32 error_code = response.has_error_code() ? response.error_code() : 0;
    if( error_code >= 300 ) {
        error_ = "Error in protobuf response: ";
        if( error_code )
            error_ += QString(" code=%1 ").arg(error_code);
        for(int c=0; c<response.error_message_size(); ++c)
            error_ += QString(" error%1=").arg(c) + QString::fromStdString(response.error_message(c)) + " ";
        error_ = error_.trimmed();
        return false;
    }

    if( !response.has_message_type() ) {
        error_ = QString("Error in protobuf response: 'message_type' is absent.");
        return false;
    }
    else if( response.message_type() != RPC_WORKGROUPS_LIST && response.message_type() != RPC_UNKNOWN ) {
        error_ = QString("Error in protobuf response: 'message_type=%1'.").arg( response.message_type() );
        return false;
    }

    return validate( response.workgroups_list() );
}
Example #5
0
    double get_parameter(const std::string &name) const {
        std::string *allocated_name = new std::string(name);

        NGetParameter *gp = new NGetParameter;
        gp->set_allocated_name(allocated_name);
        assert(gp->IsInitialized());

        Call c;
        c.set_type(Call::N_GET_PARAMETER);
        c.set_allocated_n_get_parameter(gp);
        assert(c.IsInitialized());

        std::string buf = c.SerializeAsString();
        zmq::message_t req((void*) buf.data(), buf.length(), 0);

        socket.send(req);
        zmq::message_t resp;
        socket.recv(&resp);

        Response r;
        bool parsed = r.ParseFromArray(resp.data(), resp.size());
        assert(parsed);
        return r.n_get_parameter().value().double_();
    }