Esempio n. 1
0
            public void OnComplete()
            {
                if (Success)
                {
                    var recordCount    = BatchMessageLogRecord.Records.Count();
                    var messageResults = new List <BatchMessageItemResult>();
                    foreach (var record in BatchMessageLogRecord.Records)
                    {
                        messageResults.Add(new BatchMessageItemResult(record.MessageId, record.Code, record.QueueOffset, record.CreatedTime, record.StoredTime, record.Tag));
                    }
                    var result   = new BatchMessageStoreResult(Queue.Topic, Queue.QueueId, messageResults);
                    var data     = BatchMessageUtils.EncodeMessageStoreResult(result);
                    var response = RemotingResponseFactory.CreateResponse(RemotingRequest, data);

                    RequestHandlerContext.SendRemotingResponse(response);

                    if (BatchSendMessageRequestHandler._notifyWhenMessageArrived && recordCount > 0)
                    {
                        BatchSendMessageRequestHandler._suspendedPullRequestManager.NotifyNewMessage(Queue.Topic, Queue.QueueId, BatchMessageLogRecord.Records.First().QueueOffset);
                    }

                    if (recordCount > 0)
                    {
                        var lastRecord = BatchMessageLogRecord.Records.Last();
                        BatchSendMessageRequestHandler._brokerController.AddLatestMessage(lastRecord.MessageId, lastRecord.CreatedTime, lastRecord.StoredTime);
                    }
                }
                else
                {
                    var response = RemotingResponseFactory.CreateResponse(RemotingRequest, ResponseCode.Failed, Encoding.UTF8.GetBytes(SendMessageFailedText));
                    RequestHandlerContext.SendRemotingResponse(response);
                }
            }
        public static byte[] EncodeMessageStoreResult(BatchMessageStoreResult result)
        {
            var bytesList = new List <byte[]>();

            //queueId
            var queueIdBytes = BitConverter.GetBytes(result.QueueId);

            //topic
            var topicBytes       = Encoding.UTF8.GetBytes(result.Topic);
            var topicLengthBytes = BitConverter.GetBytes(topicBytes.Length);

            //messageCount
            var messageCountBytes = BitConverter.GetBytes(result.MessageResults.Count());

            bytesList.AddRange(new byte[][] { queueIdBytes, topicLengthBytes, topicBytes, messageCountBytes });

            //messages
            foreach (var message in result.MessageResults)
            {
                //messageId
                byte[] messageIdLengthBytes;
                byte[] messageIdBytes;
                ByteUtil.EncodeString(message.MessageId, out messageIdLengthBytes, out messageIdBytes);

                //code
                var codeBytes = BitConverter.GetBytes(message.Code);

                //queueOffset
                var queueOffsetBytes = BitConverter.GetBytes(message.QueueOffset);

                //createdTimeTicks
                var createdTimeTicksBytes = BitConverter.GetBytes(message.CreatedTime.Ticks);

                //storedTimeTicks
                var storedTimeTicksBytes = BitConverter.GetBytes(message.StoredTime.Ticks);

                //tag
                byte[] tagLengthBytes = null;
                byte[] tagBytes       = null;
                ByteUtil.EncodeString(message.Tag, out tagLengthBytes, out tagBytes);

                bytesList.AddRange(new byte[][] { messageIdLengthBytes, messageIdBytes, codeBytes, queueOffsetBytes, createdTimeTicksBytes, storedTimeTicksBytes, tagLengthBytes, tagBytes });
            }

            return(ByteUtil.Combine(bytesList));
        }
Esempio n. 3
0
 public BatchSendResult(SendStatus sendStatus, BatchMessageStoreResult messageStoreResult, string errorMessage)
 {
     SendStatus         = sendStatus;
     MessageStoreResult = messageStoreResult;
     ErrorMessage       = errorMessage;
 }