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)); }
public BatchSendResult(SendStatus sendStatus, BatchMessageStoreResult messageStoreResult, string errorMessage) { SendStatus = sendStatus; MessageStoreResult = messageStoreResult; ErrorMessage = errorMessage; }