private void assembleMessageParts <T>(ref MessagePartInfo lastReceivedMessagePartInfo, ref List <T> receivedMessageParts, MessagePartInfo currentlyReceivedMessagePartInfo, T currentlyReceivedMessagePart, Action doCallback) { if (currentlyReceivedMessagePartInfo.NumberOfMessageParts == 1) { lastReceivedMessagePartInfo = currentlyReceivedMessagePartInfo; receivedMessageParts = new List <T>() { currentlyReceivedMessagePart }; doCallback(); lastReceivedMessagePartInfo = null; receivedMessageParts = null; } else { if (lastReceivedMessagePartInfo == null) { lastReceivedMessagePartInfo = currentlyReceivedMessagePartInfo; receivedMessageParts = new List <T>() { currentlyReceivedMessagePart }; } else { if (lastReceivedMessagePartInfo.MessageCorrelationId == currentlyReceivedMessagePartInfo.MessageCorrelationId && lastReceivedMessagePartInfo.NumberOfMessageParts == currentlyReceivedMessagePartInfo.NumberOfMessageParts) { lastReceivedMessagePartInfo = currentlyReceivedMessagePartInfo; receivedMessageParts.Add(currentlyReceivedMessagePart); if (lastReceivedMessagePartInfo.LastMessagePart && lastReceivedMessagePartInfo.NumberOfMessageParts == receivedMessageParts.Count) { doCallback(); lastReceivedMessagePartInfo = null; receivedMessageParts = null; } } else { lastReceivedMessagePartInfo = currentlyReceivedMessagePartInfo; receivedMessageParts = null; } } } }
void ICallbackHandler.HandleChangeHighlightRequest(ChangeHighlightRequestFromMQ changeHighlighRequest, MessagePartInfo messagePartInfo) { onRequestReceived(); assembleMessageParts( ref changeHighlightMessagePartInfo, ref changeHighlightMessageParts, messagePartInfo, changeHighlighRequest, () => { List <PreviewPartWithFocusedRange> previewParts = new List <PreviewPartWithFocusedRange>(); foreach (var messagePart in changeHighlightMessageParts) { previewParts.AddRange(messagePart.ActivePreviewParts); } var request = new ChangeHighlightRequestFromMQ() { ActivePreviewParts = previewParts.ToArray() }; callbackHandler.QueueChangeHighlightRequest(request.Convert()); }); }
void ICallbackHandler.HandleContentUpdateRequest(ContentUpdateRequestFromMQ contentUpdateRequest, MessagePartInfo messagePartInfo) { onRequestReceived(); assembleMessageParts( ref contentUpdateMessagePartInfo, ref contentUpdateMessageParts, messagePartInfo, contentUpdateRequest, () => { List <PreviewPart> previewParts = new List <PreviewPart>(); foreach (var messagePart in contentUpdateMessageParts) { previewParts.AddRange(messagePart.PreviewParts); } var request = new ContentUpdateRequestFromMQ() { PreviewParts = previewParts.ToArray() }; callbackHandler.QueueContentUpdateRequest(request.Convert()); }); }
void ICallbackHandler.HandlePreviewPartIdUpdateRequest(PreviewPartIdUpdateRequestFromMQ previewPartIdUpdateRequest, MessagePartInfo messagePartInfo) { onRequestReceived(); assembleMessageParts( ref previewPartIdUpdateMessagePartInfo, ref previewPartIdUpdateMessageParts, messagePartInfo, previewPartIdUpdateRequest, () => { List <string> previewPartIds = new List <string>(); foreach (var messagePart in previewPartIdUpdateMessageParts) { previewPartIds.AddRange(messagePart.PreviewPartIds); } var request = new PreviewPartIdUpdateRequestFromMQ() { PreviewPartIds = previewPartIds.ToArray() }; callbackHandler.QueuePreviewPartIdUpdateRequest(request.Convert()); }); }