Exemple #1
0
        /*
         * struct {
         *  MsgHeader header;         // standard message header
         *  int32     responseFlags;  // bit vector - see details below
         *  int64     cursorID;       // cursor id if client needs to do get more's
         *  int32     startingFrom;   // where in the cursor this reply is starting
         *  int32     numberReturned; // number of documents in the reply
         *  document* documents;      // documents
         * }
         */
        /// <summary>
        /// Reads OP_REPLY but does not interpret it
        /// </summary>
        public static ReplyData Read_REPLY(Stream stream)
        {
            stream.Position = sizeof(Int32);               //skip Total size
            var hdrReqID  = BinUtils.ReadInt32(stream);
            var hdrRespTo = BinUtils.ReadInt32(stream);
            var hdrOpCode = BinUtils.ReadInt32(stream);

            if (hdrOpCode != OP_REPLY)
            {
                throw new MongoDbConnectorProtocolException(StringConsts.PROTO_READ_OP_REPLY_ERROR + " not OP_REPLY");
            }

            var flags        = (ResponseFlags)BinUtils.ReadInt32(stream);
            var cursorID     = BinUtils.ReadInt64(stream);
            var startingFrom = BinUtils.ReadInt32(stream);
            var numReturned  = BinUtils.ReadInt32(stream);

            if (numReturned > MAX_DOC_COUNT_LIMIT)
            {
                throw new MongoDbConnectorProtocolException(StringConsts.PROTO_REPLY_DOC_COUNT_EXCEED_LIMIT_ERROR.Args(numReturned, MAX_DOC_COUNT_LIMIT));
            }

            var docs = new BSONDocument[numReturned];

            for (var i = 0; i < numReturned; i++)
            {
                docs[i] = new BSONDocument(stream);
            }

            return(new ReplyData(hdrReqID, hdrRespTo, flags, cursorID, startingFrom, docs));
        }