Beispiel #1
0
        public virtual void ReadFrom(byte[] recordBuffer)
        {
            var srcOffset = 0;

            LogPosition = MessageUtils.DecodeLong(recordBuffer, srcOffset, out srcOffset);
            MessageId   = MessageUtils.DecodeString(recordBuffer, srcOffset, out srcOffset);
            Topic       = MessageUtils.DecodeString(recordBuffer, srcOffset, out srcOffset);
            Code        = MessageUtils.DecodeInt(recordBuffer, srcOffset, out srcOffset);
            Body        = MessageUtils.DecodeBytes(recordBuffer, srcOffset, out srcOffset);
            QueueId     = MessageUtils.DecodeInt(recordBuffer, srcOffset, out srcOffset);
            QueueOffset = MessageUtils.DecodeLong(recordBuffer, srcOffset, out srcOffset);
            CreatedTime = MessageUtils.DecodeDateTime(recordBuffer, srcOffset, out srcOffset);
            StoredTime  = MessageUtils.DecodeDateTime(recordBuffer, srcOffset, out srcOffset);
        }
Beispiel #2
0
        public QueueMessage GetMessage(long position)
        {
            var buffer = GetMessageBuffer(position);

            if (buffer != null)
            {
                var nextOffset    = 0;
                var messageLength = MessageUtils.DecodeInt(buffer, nextOffset, out nextOffset);
                if (messageLength > 0)
                {
                    var message      = new QueueMessage();
                    var messageBytes = new byte[messageLength];
                    Buffer.BlockCopy(buffer, nextOffset, messageBytes, 0, messageLength);
                    message.ReadFrom(messageBytes);
                    return(message);
                }
            }
            return(null);
        }
Beispiel #3
0
        private IEnumerable <QueueMessage> DecodeMessages(PullRequest pullRequest, byte[] buffer)
        {
            var messages = new List <QueueMessage>();

            if (buffer == null || buffer.Length <= 4)
            {
                return(messages);
            }

            try
            {
                var nextOffset    = 0;
                var messageLength = MessageUtils.DecodeInt(buffer, nextOffset, out nextOffset);
                while (messageLength > 0)
                {
                    var message      = new QueueMessage();
                    var messageBytes = new byte[messageLength];
                    Buffer.BlockCopy(buffer, nextOffset, messageBytes, 0, messageLength);
                    nextOffset += messageLength;
                    message.ReadFrom(messageBytes);
                    if (!message.IsValid())
                    {
                        _logger.ErrorFormat("Invalid message, pullRequest: {0}", pullRequest);
                        continue;
                    }
                    messages.Add(message);
                    if (nextOffset >= buffer.Length)
                    {
                        break;
                    }
                    messageLength = MessageUtils.DecodeInt(buffer, nextOffset, out nextOffset);
                }
            }
            catch (Exception ex)
            {
                _logger.Error(string.Format("Decode pull return message has exception, pullRequest: {0}", pullRequest), ex);
            }

            return(messages);
        }