// public methods
        /// <summary>
        /// Reads the message.
        /// </summary>
        /// <returns>A message.</returns>
        public CompressedMessage ReadMessage()
        {
            var reader          = CreateJsonReader();
            var context         = BsonDeserializationContext.CreateRoot(reader);
            var messageDocument = BsonDocumentSerializer.Instance.Deserialize(context);

            var opcode = (Opcode)messageDocument["opcode"].ToInt32();

            if (opcode != Opcode.Compressed)
            {
                throw new FormatException($"Command message invalid opcode: \"{opcode}\".");
            }

            var compressorId      = (CompressorType)messageDocument["compressorId"].ToInt32();
            var compressedMessage = messageDocument["compressedMessage"].AsString;

            using (var originalTextReader = new StringReader(compressedMessage))
            {
                var jsonEncoderFactory = new JsonMessageEncoderFactory(originalTextReader, _encoderSettings);
                var originalEncoder    = _originalEncoderSelector.GetEncoder(jsonEncoderFactory);
                var originalMessage    = originalEncoder.ReadMessage();

                return(new CompressedMessage(originalMessage, null, compressorId));
            }
        }
 public void GetUpdateMessageEncoder_should_return_a_UpdateMessageJsonEncoder()
 {
     using (var textWriter = new StringWriter())
     {
         var encoderFactory = new JsonMessageEncoderFactory(null, textWriter, __messageEncoderSettings);
         var encoder        = encoderFactory.GetUpdateMessageEncoder();
         encoder.Should().BeOfType <UpdateMessageJsonEncoder>();
     }
 }
 public void GetReplyMessageEncoder_should_return_a_ReplyMessageJsonEncoder()
 {
     using (var textReader = new StringReader(""))
     {
         var encoderFactory = new JsonMessageEncoderFactory(textReader, null, __messageEncoderSettings);
         var encoder        = encoderFactory.GetReplyMessageEncoder <BsonDocument>(BsonDocumentSerializer.Instance);
         encoder.Should().BeOfType <ReplyMessageJsonEncoder <BsonDocument> >();
     }
 }
 public void GetInsertMessageEncoder_should_return_a_InsertMessageJsonEncoder()
 {
     using (var textWriter = new StringWriter())
     {
         var encoderFactory = new JsonMessageEncoderFactory(null, textWriter, __messageEncoderSettings);
         var encoder        = encoderFactory.GetInsertMessageEncoder <BsonDocument>(BsonDocumentSerializer.Instance);
         encoder.Should().BeOfType <InsertMessageJsonEncoder <BsonDocument> >();
     }
 }
Exemple #5
0
 public void GetUpdateMessageEncoder_should_return_a_UpdateMessageJsonEncoder()
 {
     using (var stringWriter = new StringWriter())
         using (var jsonWriter = new JsonWriter(stringWriter))
         {
             var encoderFactory = new JsonMessageEncoderFactory(null, jsonWriter);
             var encoder        = encoderFactory.GetUpdateMessageEncoder();
             encoder.Should().BeOfType <UpdateMessageJsonEncoder>();
         }
 }
Exemple #6
0
 public void GetReplyMessageEncoder_should_return_a_ReplyMessageJsonEncoder()
 {
     using (var stringWriter = new StringWriter())
         using (var jsonWriter = new JsonWriter(stringWriter))
         {
             var encoderFactory = new JsonMessageEncoderFactory(null, jsonWriter);
             var encoder        = encoderFactory.GetReplyMessageEncoder <BsonDocument>(BsonDocumentSerializer.Instance);
             encoder.Should().BeOfType <ReplyMessageJsonEncoder <BsonDocument> >();
         }
 }
        /// <summary>
        /// Writes the message.
        /// </summary>
        /// <param name="message">The message.</param>
        public void WriteMessage(CompressedMessage message)
        {
            Ensure.IsNotNull(message, nameof(message));

            var writer = CreateJsonWriter();

            writer.WriteStartDocument();
            writer.WriteInt32("opcode", (int)Opcode.Compressed);
            writer.WriteInt32("compressorId", (int)message.CompressorType);

            using (var originalWriter = new StringWriter())
            {
                var jsonEncoderFactory = new JsonMessageEncoderFactory(originalWriter, _encoderSettings);
                var originalEncoder    = _originalEncoderSelector.GetEncoder(jsonEncoderFactory);
                originalEncoder.WriteMessage(message.OriginalMessage);
                writer.WriteString("compressedMessage", originalWriter.ToString());
            }

            writer.WriteEndDocument();
        }