特定のメッセージをシーケンス番号とともに送信するサーバーをリッスンしています。私のクライアントは、シーケンス番号が重複しているかどうか、またはシーケンス番号が欠落しているかどうかを追跡するためにシーケンス番号を解析しますが、これは単一の増分シーケンス番号を期待するラッパー オブジェクトによって一般的に呼び出されます。残念ながら、この特定のサーバーは、各サブストリーム内でのみインクリメンタルなシーケンス番号の異なるストリームを送信します。言い換えれば、より単純なサーバーでは次のように送信されます。
1,2,3,4,5,7
私が報告するだけ1,2,3,4,5,6,7
で、ラッパー ツールは 1 つのメッセージが失われたことを通知します。残念ながら、このより複雑なサーバーは私に次のようなものを送ります:
A1、A2、A3、B1、B2、A4、C1、A5、A7
(ただし、文字は実際には数値コードでもありますが、便利です)。上記は A6 以外にギャップはありませんが、1 つの数値をラッパー オブジェクトに報告する必要があるため、報告できません。
1,2,3,1,2,4,1,5,7
間違って解釈されるからです。そのため、クライアントで受け取ったものを 1 つのインクリメンタル ストリームに凝縮したいと考えています。例
A1、A2、A3、B1、B2、A4、C1、A5、A7
実際には次のように変換する必要があります。
1、2、3、4 (B1 は実際には 4 番目の一意のメッセージであるため)、5、6、7、8、10 (9 は A6、B3、C2、または別の文字 1 である可能性があるため)
その場合、これは 1 つのメッセージ (A6) を見逃したと見なされます。別のシーケンス例:
A1、A2、B1、A7、C1、A8
次のように報告できます。
1,2,3,8,9,10
最初の 3 つは論理的に有効な順序であり、欠落がないためです。次に、A7 を取得します。これは、4 つのメッセージ (A3、A4、A5、および A6) を見逃したことを意味するため、ラッパーが判断できるように 8 を報告します。その後、C1 が入ってきて、それで問題ないので 9 番を付け、A8 が次に期待される A になったので 10 番を付けます。
ただし、この動作を作成する方法を見つけるのに苦労しています。それについて行くにはどのような方法がありますか?