private static async Task <long> ProcessNextMessagesWithSessionStateAsync(SubscriptionClient client, IMessageSession session, SessionStateManager session_state, ConsoleColor color) { int x = session_state.LastProcessedCount + 1; long seq2 = 0; while (true) { if (!session_state.DeferredList.TryGetValue(x, out seq2)) { break; } //------------------------------- var deferredMessage = await session.ReceiveDeferredMessageAsync(seq2); if (ProcessMessages(deferredMessage, color)) { await session.CompleteAsync(deferredMessage.SystemProperties.LockToken); if (deferredMessage.UserProperties["IsLast"].ToString().ToLower() == "true") { //end of the session await session.SetStateAsync(null); await session.CloseAsync(); } else { session_state.LastProcessedCount = ((int)deferredMessage.UserProperties["Order"]); session_state.DeferredList.Remove(x); await session.SetStateAsync(Serialize <SessionStateManager>(session_state)); } } else { await client.DeadLetterAsync(deferredMessage.SystemProperties.LockToken, "Message is of the wrong type or could not be processed", "Cannot deserialize this message as the type is unknown."); session_state.DeferredList.Remove(x); await session.SetStateAsync(Serialize <SessionStateManager>(session_state)); } //------------------------------ x++; } return(seq2); }
private static async Task <long> ProcessNextMessagesWithSessionStateAsync(SubscriptionClient client, IMessageSession session, SessionStateManager session_state, int EndOfSessionCount, ConsoleColor color) { int x = session_state.LastProcessedCount + 1; long seq2 = 0; if (session_state.DeferredList.TryGetValue(x, out long seq1)) { while (true) { if (!session_state.DeferredList.TryGetValue(x, out seq2)) { break; } //------------------------------- var deferredMessage = await session.ReceiveDeferredMessageAsync(seq2); if (ProcessMessages(deferredMessage, Color.White)) { await session.CompleteAsync(deferredMessage.SystemProperties.LockToken); session_state.LastProcessedCount = ((int)deferredMessage.UserProperties["Count"]); session_state.DeferredList.Remove(x); await session.SetStateAsync(Utils.Serialize <SessionStateManager>(session_state)); } else { await client.DeadLetterAsync(deferredMessage.SystemProperties.LockToken, "Message is of the wrong type", "Cannot deserialize this message as the type in the Label prop is unknown."); session_state.DeferredList.Remove(x); await session.SetStateAsync(Utils.Serialize <SessionStateManager>(session_state)); } //------------------------------ x++; } } return(seq2); }