Files
NNNet/docs/ARCHITECTURE.md

3.5 KiB
Raw Blame History

Архитектура NNNet

Слои

  • BLE Transport: сканирование, реклама, соединения, обмен пакетами.
  • Mesh Layer: маршрутизация, TTL, дедупликация, ACK, ретрансляция профильных пакетов.
  • Messaging Layer: список чатов, отдельный экран диалога, статусы доставки, история.
  • Storage Layer: Room для локального хранения сообщений, очереди и профилей.
  • Delivery Layer: retry queue, ACK timeout, повторные отправки из фонового сервиса.
  • Update Layer: version.json, changelog и ручная/автоматическая проверка обновлений клиента.
  • Profile Layer: локальный профиль пользователя, username как основной идентификатор, кэш профилей из mesh-сети и разрешение username -> peerId.

Пользовательский сценарий

  • Главный экран показывает список чатов в стиле Telegram.
  • Верхний статусный блок переключает mesh-сеть между состояниями В сети и Не в сети.
  • Слева в шапке показывается общее количество известных устройств в mesh.
  • Настройки вынесены в меню три точки, отдельный debug-лог из пользовательского интерфейса убран.
  • Отправка сообщений доступна только из экрана конкретного диалога.
  • В настройках пользователь редактирует свой профиль и ищет другие профили по username.

Топология сети

  • Выделенный сервер или хост для работы mesh не нужен.
  • Все узлы равноправны: каждый телефон может быть источником, получателем и ретранслятором.
  • Сеть не рассчитана на бесконечное число пользователей. Масштаб ограничивается радиусом BLE, количеством соседних соединений, частотой ретрансляции и ограничениями Android по энергии и фону.
  • Профильные данные передаются отдельными mesh-пакетами и кэшируются на устройствах. Это даёт распределённый каталог пользователей без центрального сервера, но актуальность данных зависит от распространения пакетов по сети.

Сетевой пакет (черновик)

{
  "messageId": "uuid",
  "senderId": "device-or-user-id",
  "targetId": "user-or-group-id",
  "ttl": 6,
  "timestamp": 0,
  "type": "message|ack|presence|profile",
  "payload": "base64-or-json"
}

Ближайшие шаги

  1. Укрепить transport: фрагментация крупных пакетов и более надёжный reconnect.
  2. Ввести шифрование payload и подпись пакетов.
  3. Добавить инструментальные BLE-тесты на нескольких устройствах и полевой прогон.