Стабильная версия сервера  0.2
Пакует блокченй в файл и бд, проверяет форматы.

Дальше делать:
Описание форматов.
Запросы клиент-сервер.
Промт на клиента.

---
Потом в сервак дописать
Синхронизацию серверов.
This commit is contained in:
AidarKC 2025-12-31 21:50:16 +03:00
parent c13940216b
commit 71f1a6179c
2 changed files with 47 additions and 0 deletions

View File

@ -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.
Итог: «бутстрап»: сначала безопасность файлов, потом сеть.

View File

@ -0,0 +1,11 @@
package server.logic.ws_protocol.binary.handlers;
/**
* Общий интерфейс для всех обработчиков входящих сообщений.
*/
public interface MessageHandler {
/**
* Обработать входящее сообщение и вернуть бинарный ответ.
*/
byte[] handle(byte[] msg);
}