Мессенджер Maestrosnov: состояния без отката
Разбор исходной реализации и исполняемые сценарии запоздалых событий.
MAESTROSNOV CHAT / ИНЖЕНЕРНЫЙ РАЗБОР
Прочитанное сообщение не становится «отправленным»
После обрыва связи события приходят с задержкой и в другом порядке. В мессенджере состояние объединяется по правилам: подтверждённый факт сохраняется, а запоздалый ответ не откатывает интерфейс.
Воспроизвести последовательность
Макеты готовы к просмотру.
Ещё не отправленоЧто пришло и что осталось
Здесь выполняется исходная функция mergeChatDeliveryState. Сообщение в примере условное; отправки в настоящий чат нет.
Квитанции не теряют прогресс
У версии 12: доставлено троим, прочитано двумя. Затем приходит версия 11 с одним прочтением. Модуль сохраняет версию 12 и счётчики 3 / 2.
Получено при выполнении: версия 12, доставлено 3, прочитано 2.
Расшифровка остаётся готовой
Готовая расшифровка версии 9 не заменяется запоздалым состоянием «обрабатывается» версии 8. Текст остаётся в сообщении.
Получено при выполнении: ready, версия 9, «Готовая расшифровка».
Граница этой проверки
Разобрана клиентская логика объединения состояний из сохранённого проекта. Проверка не измеряет скорость доставки и не подтверждает работу текущего сервера. Транзакционный журнал, синхронизация по курсору и очередь расшифровки описаны отдельно в документации реализации.
Источник и воспроизведение
apps/web/lib/chat-sync/message-state.ts
Коммит: 169394d389de98db629f69e1b46aef8434805c43
SHA-256 исходника: 0aa323156959726aef81e5bb37041c7649a6a23836616f990cda0c684e526cdd
Скачайте пять файлов ниже в одну папку и выполните node verify.cjs. Исходный TypeScript сохранён как текст; JavaScript получен удалением типов через TypeScript.