3.5 KiB
3.5 KiB
Архитектура 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"
}
Ближайшие шаги
- Укрепить transport: фрагментация крупных пакетов и более надёжный reconnect.
- Ввести шифрование payload и подпись пакетов.
- Добавить инструментальные BLE-тесты на нескольких устройствах и полевой прогон.