From 71f1a6179ce74f3e46ad2f9275a361ca750c2f146887ea43f8312e0291959964 Mon Sep 17 00:00:00 2001 From: AidarKC Date: Wed, 31 Dec 2025 21:50:16 +0300 Subject: [PATCH] =?UTF-8?q?31=2012=2025=20=D0=A1=D1=82=D0=B0=D0=B1=D0=B8?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D0=B0=D1=8F=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8?= =?UTF-8?q?=D1=8F=20=D1=81=D0=B5=D1=80=D0=B2=D0=B5=D1=80=D0=B0=20=200.2=20?= =?UTF-8?q?=D0=9F=D0=B0=D0=BA=D1=83=D0=B5=D1=82=20=D0=B1=D0=BB=D0=BE=D0=BA?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=B9=20=D0=B2=20=D1=84=D0=B0=D0=B9=D0=BB=20?= =?UTF-8?q?=D0=B8=20=D0=B1=D0=B4,=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D1=8F=D0=B5=D1=82=20=D1=84=D0=BE=D1=80=D0=BC=D0=B0=D1=82=D1=8B?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Дальше делать: Описание форматов. Запросы клиент-сервер. Промт на клиента. --- Потом в сервак дописать Синхронизацию серверов. --- .../shine-main Описание базовых классов.md | 36 +++++++++++++++++++ .../binary/handlers/MessageHandler.java | 11 ++++++ 2 files changed, 47 insertions(+) create mode 100644 src/main/java/server/logic/ws_protocol/binary/handlers/MessageHandler.java diff --git a/DOC/libs/shine-main Описание базовых классов.md b/DOC/libs/shine-main Описание базовых классов.md index 473a0f4..f7b926a 100644 --- a/DOC/libs/shine-main Описание базовых классов.md +++ b/DOC/libs/shine-main Описание базовых классов.md @@ -0,0 +1,36 @@ +краткая «памятка себе» по базовым классам и как они связаны. + +server.logic.InboundMessageProcessor (устаревший путь) + +Роль: маршрутизатор бинарного протокола: берёт входящие байты, читает первые 4 байта как op, находит MessageHandler и отдаёт ему сообщение. +Что возвращает: байтовый ответ хэндлера; при ошибках — 4 байта со статусом (BAD_REQUEST/INTERNAL_ERROR). +Важно: сейчас фактически не используется (карта HANDLERS пустая/закомментирована) — это «след» старого бинарного протокола, который вы заменили на JSON-WS. + +server.ws.BlockchainTmpRecoveryOnStartup + +Роль: «автослесарь» при старте: чинит последствия падения во время записи блокчейн-файла. +Логика: ищет *.tmp_bch в data/, сравнивает размеры tmp, main .bch и state.fileSizeBytes из БД. +Решения: +если stateSize == mainSize → tmp мусор, удаляем; +если stateSize == tmpSize → tmp актуален, атомарно заменяем main; +если не сходится / подозрительно (нет state, но есть main+tmp и т.п.) → CRITICAL + стоп сервера. +Итог: гарантирует, что на запуске не будет «тихо битого» блокчейна. + +server.ws.BlockchainWsEndpoint + +Роль: WS-эндпоинт Jetty, который принимает и бинарные, и текстовые сообщения. +Connect: сохраняет Session, кладёт её в ConnectionContext. +Binary: асинхронно вызывает InboundMessageProcessor.process(msg) и отправляет байтовый ответ. (Это тот самый устаревший путь.) +Text (JSON): асинхронно вызывает JsonInboundProcessor.processJson(message, connectionContext) и отправляет строку JSON. +Close: удаляет соединение из ActiveConnectionsRegistry, чистит ConnectionContext. +Смысл: один входной узел WS, где JSON — основной протокол, binary — “наследие”. + +server.ws.WsServer + +Роль: точка входа сервера. + +Порядок запуска: +BlockchainTmpRecoveryOnStartup.runRecoveryOrThrow() — если не смог починить/сопоставить → сервер не стартует; +читает порт из AppConfig (server.port), иначе 7070; +поднимает Jetty, конфигурирует WS-контейнер, маппит /ws → BlockchainWsEndpoint, ставит idleTimeout. +Итог: «бутстрап»: сначала безопасность файлов, потом сеть. \ No newline at end of file diff --git a/src/main/java/server/logic/ws_protocol/binary/handlers/MessageHandler.java b/src/main/java/server/logic/ws_protocol/binary/handlers/MessageHandler.java new file mode 100644 index 0000000..ba4fb05 --- /dev/null +++ b/src/main/java/server/logic/ws_protocol/binary/handlers/MessageHandler.java @@ -0,0 +1,11 @@ +package server.logic.ws_protocol.binary.handlers; + +/** + * Общий интерфейс для всех обработчиков входящих сообщений. + */ +public interface MessageHandler { + /** + * Обработать входящее сообщение и вернуть бинарный ответ. + */ + byte[] handle(byte[] msg); +}