/// <summary> /// Decode messages from a payload and assign it a given kafka offset. /// </summary> /// <param name="offset">The offset represting the log entry from kafka of this message.</param> /// <param name="payload">The byte[] encode as a message from kafka.</param> /// <returns>The message</returns> /// <remarks>The return type is an Enumerable as the message could be a compressed message set.</remarks> internal static Message DecodeMessage(long offset, int partitionId, KafkaDecoder decoder, int messageSize) { var crc = decoder.ReadUInt32(); var calculatedCrc = Crc32Provider.Compute(decoder.Buffer, decoder.Offset, messageSize - 4); if (calculatedCrc != crc) { throw new FailCrcCheckException("Payload did not match CRC validation."); } var message = new Message { Meta = new MessageMetadata(offset, partitionId), MagicNumber = decoder.ReadByte(), Attribute = decoder.ReadByte(), Key = decoder.ReadBytes(), }; var codec = (MessageCodec)(ProtocolConstants.AttributeCodeMask & message.Attribute); switch (codec) { case MessageCodec.CodecNone: message.Value = decoder.ReadBytes(); break; default: throw new NotSupportedException(string.Format("Codec type of {0} is not supported.", codec)); } return(message); }
/// <summary> /// Decode messages from a payload and assign it a given kafka offset. /// </summary> /// <param name="offset">The offset represting the log entry from kafka of this message.</param> /// <param name="payload">The byte[] encode as a message from kafka.</param> /// <returns>The message</returns> /// <remarks>The return type is an Enumerable as the message could be a compressed message set.</remarks> internal static Message DecodeMessage(long offset, int partitionId, KafkaDecoder decoder, int messageSize) { var crc = decoder.ReadUInt32(); var calculatedCrc = Crc32Provider.Compute(decoder.Buffer, decoder.Offset, messageSize - 4); if (calculatedCrc != crc) { throw new FailCrcCheckException("Payload did not match CRC validation."); } var message = new Message { Meta = new MessageMetadata(offset, partitionId), MagicNumber = decoder.ReadByte(), Attribute = decoder.ReadByte(), Key = decoder.ReadBytes(), }; var codec = (MessageCodec)(ProtocolConstants.AttributeCodeMask & message.Attribute); switch (codec) { case MessageCodec.CodecNone: message.Value = decoder.ReadBytes(); break; default: throw new NotSupportedException(string.Format("Codec type of {0} is not supported.", codec)); } return message; }