46 lines
4.0 KiB
Markdown
46 lines
4.0 KiB
Markdown
# Архитектура NNNet
|
||
|
||
## Слои
|
||
- BLE Transport: сканирование, реклама, соединения, обмен пакетами.
|
||
- Mesh Layer: маршрутизация, TTL, дедупликация, ACK, ретрансляция профильных пакетов.
|
||
- Messaging Layer: список чатов, отдельный экран диалога, статусы доставки, история.
|
||
- Storage Layer: Room для локального хранения сообщений, очереди и профилей.
|
||
- Diagnostics 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-пакетами и кэшируются на устройствах. Это даёт распределённый каталог пользователей без центрального сервера, но актуальность данных зависит от распространения пакетов по сети.
|
||
- Карта сети строится как относительная топология связей, а не как GPS/геометрическая карта здания. Высота этажей пока не моделируется.
|
||
|
||
## Сетевой пакет (черновик)
|
||
```json
|
||
{
|
||
"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-тесты на нескольких устройствах и полевой прогон.
|