/// <summary>
        /// Writes the message.
        /// </summary>
        /// <param name="message">The message.</param>
        public void WriteMessage(GetMoreMessage message)
        {
            Ensure.IsNotNull(message, "message");

            var messageDocument = new BsonDocument
            {
                { "opcode", "getMore" },
                { "requestId", message.RequestId },
                { "database", message.CollectionNamespace.DatabaseNamespace.DatabaseName },
                { "collection", message.CollectionNamespace.CollectionName },
                { "cursorId", message.CursorId },
                { "batchSize", message.BatchSize }
            };

            var jsonWriter = CreateJsonWriter();
            var messageContext = BsonSerializationContext.CreateRoot(jsonWriter);
            BsonDocumentSerializer.Instance.Serialize(messageContext, messageDocument);
        }
        /// <summary>
        /// Writes the message.
        /// </summary>
        /// <param name="message">The message.</param>
        public void WriteMessage(GetMoreMessage message)
        {
            Ensure.IsNotNull(message, "message");

            var binaryWriter = CreateBinaryWriter();
            var stream = binaryWriter.BsonStream;
            var startPosition = stream.Position;

            stream.WriteInt32(0); // messageSize
            stream.WriteInt32(message.RequestId);
            stream.WriteInt32(0); // responseTo
            stream.WriteInt32((int)Opcode.GetMore);
            stream.WriteInt32(0); // reserved
            stream.WriteCString(message.CollectionNamespace.FullName);
            stream.WriteInt32(message.BatchSize);
            stream.WriteInt64(message.CursorId);
            stream.BackpatchSize(startPosition);
        }
Esempio n. 3
0
        private void ProcessGetMoreMessage(GetMoreMessage originalMessage, ConnectionId connectionId, Stopwatch stopwatch)
        {
            var commandName = "getMore";
            var operationId = EventContext.OperationId;

            if (_startedEvent != null)
            {
                var command = new BsonDocument
                {
                    { commandName, originalMessage.CursorId },
                    { "collection", originalMessage.CollectionNamespace.CollectionName },
                    { "batchSize", originalMessage.BatchSize, originalMessage.BatchSize > 0 }
                };

                var @event = new CommandStartedEvent(
                    "getMore",
                    command,
                    originalMessage.CollectionNamespace.DatabaseNamespace,
                    operationId,
                    originalMessage.RequestId,
                    connectionId);

                _startedEvent(@event);
            }

            if (_shouldTrackState)
            {
                _state.TryAdd(originalMessage.RequestId, new CommandState
                {
                    CommandName          = commandName,
                    OperationId          = operationId,
                    Stopwatch            = stopwatch,
                    QueryNamespace       = originalMessage.CollectionNamespace,
                    ExpectedResponseType = ExpectedResponseType.Query
                });
            }
        }