virtual void reply( Message& query , Message& toSend, MSGID responseTo ){
            _reply = toSend;

            _reply.data->id = nextMessageId();
            _reply.data->responseTo = responseTo;
            uassert( 10274 ,  "pipelining requests doesn't work yet" , query.data->id == _cur.data->id );
        }
示例#2
0
void AsyncMessagingPort::asyncSend(Message& toSend, int responseTo) {
    //TODO: get rid of nextMessageId
    toSend.header().setId(nextMessageId());
    toSend.header().setResponseTo(responseTo);
    //TODO: Piggyback data is added here
    toSend.isSingleData() ? asyncSendSingle(toSend) : asyncSendMulti(toSend);
}
std::unique_ptr<Message> NetworkInterfaceASIO::_messageFromRequest(
    const RemoteCommandRequest& request, rpc::Protocol protocol) {
    BSONObj query = request.cmdObj;
    auto requestBuilder = rpc::makeRequestBuilder(protocol);

    // TODO: handle metadata writers
    auto toSend = rpc::makeRequestBuilder(protocol)
                      ->setDatabase(request.dbname)
                      .setCommandName(request.cmdObj.firstElementFieldName())
                      .setMetadata(request.metadata)
                      .setCommandArgs(request.cmdObj)
                      .done();

    toSend->header().setId(nextMessageId());
    toSend->header().setResponseTo(0);

    return toSend;
}
void NetworkInterfaceASIO::_messageFromRequest(const RemoteCommandRequest& request,
                                               Message* toSend,
                                               bool useOpCommand) {
    BSONObj query = request.cmdObj;
    invariant(query.isValid());

    // TODO: Once OP_COMMAND work is complete,
    // look at client to see if it supports OP_COMMAND.

    // TODO: Investigate whether we can use CommandRequestBuilder here.

    BufBuilder b;
    b.appendNum(0);  // opts
    b.appendStr(request.dbname + ".$cmd");
    b.appendNum(0);  // toSkip
    b.appendNum(1);  // toReturn, don't care about responses
    query.appendSelfToBufBuilder(b);

    // TODO: If AsyncOp can own this buffer, we can avoid copying it in setData().
    toSend->setData(dbQuery, b.buf(), b.len());
    toSend->header().setId(nextMessageId());
    toSend->header().setResponseTo(0);
}
unsigned ConsoleMessage::assignMessageId()
{
    if (!m_messageId)
        m_messageId = nextMessageId();
    return m_messageId;
}