Я слушаю сервер, который отправляет мне определенные сообщения с порядковыми номерами. Мой клиент анализирует порядковый номер, чтобы отслеживать, получаем ли мы дубликат или пропускаем порядковый номер, хотя обычно он вызывается объектом-оболочкой, который ожидает один добавочный порядковый номер. К сожалению, этот конкретный сервер отправляет разные потоки порядковых номеров, увеличивающиеся только внутри каждого подпотока. Другими словами, более простой сервер отправил бы мне:
1,2,3,4,5,7
и я бы просто отчитался 1,2,3,4,5,6,7
, а инструмент-оболочка уведомил бы о потере одного сообщения. К сожалению, этот более сложный сервер отправляет мне что-то вроде:
A1,A2,A3,B1,B2,A4,C1,A5,A7
(за исключением того, что буквы на самом деле также являются числовыми кодами, что удобно). Вышеупомянутое не имеет пробелов, кроме A6, но поскольку мне нужно сообщить одно число объекту-оболочке, я не могу сообщить:
1,2,3,1,2,4,1,5,7
потому что это будет интерпретировано неправильно. Таким образом, я хочу сжать в своем клиенте то, что я получаю, в один добавочный поток чисел. Пример
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)
тогда это будет воспринято как пропущенное одно сообщение (A6). Другой пример последовательности:
A1,A2,B1,A7,C1,A8
можно сообщить как:
1,2,3,8,9,10
потому что первые три логически находятся в правильной последовательности, ничего не пропущено. Затем мы получаем A7, и это означает, что мы пропустили 4 сообщения (A3, A4, A5 и A6), поэтому я сообщаю о 8, чтобы обертка могла сказать. Затем приходит C1, и это нормально, поэтому я ставлю ему #9, а затем A8 теперь является следующим ожидаемым A, поэтому я ставлю ему 10.
Однако мне трудно найти способ создать такое поведение. Как это сделать?