コード例 #1
0
        // private static methods
        private byte[] CombineCommandMessageSectionsIntoSingleDocument(Stream stream)
        {
            using (var inputStream = new BsonStreamAdapter(stream, ownsStream: false))
                using (var memoryStream = new MemoryStream())
                    using (var outputStream = new BsonStreamAdapter(memoryStream, ownsStream: false))
                    {
                        var messageStartPosition = inputStream.Position;
                        var messageLength        = inputStream.ReadInt32();
                        var messageEndPosition   = messageStartPosition + messageLength;
                        var requestId            = inputStream.ReadInt32();
                        var responseTo           = inputStream.ReadInt32();
                        var opcode = inputStream.ReadInt32();
                        var flags  = (OpMsgFlags)inputStream.ReadInt32();
                        if (flags.HasFlag(OpMsgFlags.ChecksumPresent))
                        {
                            messageEndPosition -= 4; // ignore checksum
                        }

                        CopyType0Section(inputStream, outputStream);
                        outputStream.Position -= 1;
                        while (inputStream.Position < messageEndPosition)
                        {
                            CopyType1Section(inputStream, outputStream);
                        }
                        outputStream.WriteByte(0);
                        outputStream.BackpatchSize(0);

                        return(memoryStream.ToArray());
                    }
        }