bool DecodeInline(IByteBuffer byteBuffer, ICollection <object> output) { Contract.Requires(byteBuffer != null); Contract.Requires(output != null); IByteBuffer buffer = ReadLine(byteBuffer); if (buffer == null) { if (byteBuffer.ReadableBytes > this.maximumInlineMessageLength) { throw new RedisCodecException( $"Length: {byteBuffer.ReadableBytes} (expected: <= {this.maximumInlineMessageLength})"); } return(false); } IRedisMessage message = this.ReadInlineMessage(this.messageType, buffer); output.Add(message); this.ResetDecoder(); return(true); }
private async Task PublishAsync(string channel, IRedisMessage message) { byte[] payload; using (var stream = new LimitArrayPoolWriteStream()) using (var writer = JsonUtils.CreateJsonTextWriter(new StreamWriter(stream))) { _serializer.Serialize(writer, message); writer.Flush(); payload = stream.ToArray(); } _logger.PublishToChannel(channel); await _bus.PublishAsync(channel, payload); }
public void EncodeEmptyArray() { var channel = new EmbeddedChannel(new RedisEncoder()); IRedisMessage message = ArrayRedisMessage.Empty; Assert.True(channel.WriteOutbound(message)); IByteBuffer written = ReadAll(channel); byte[] output = written.Bytes(); byte[] expected = "*0\r\n".Bytes(); Assert.Equal(expected.Length, output.Length); Assert.True(output.SequenceEqual(expected)); written.Release(); }