# NNNet Проект для школьного офлайн-месседжера на базе **BLE P2P mesh-сети**. ## Цель Создать систему общения между учениками и учителями без зависимости от интернета: - обмен сообщениями в пределах школы; - работа в условиях отсутствия Wi-Fi/мобильной сети; - безопасное взаимодействие с базовой модерацией. ## Текущее состояние - BLE discovery + advertising работают. - Реализован минимальный GATT transport для обмена mesh-пакетами. - Есть foreground service, Room-хранилище, ACK/retry очередь и базовый Telegram-подобный UI. - Реализованы список чатов, окно диалога, вкладка настроек, ручная проверка обновлений и опциональная автопроверка через `version.json`. - При выключенном Bluetooth приложение запрашивает его включение перед запуском mesh. - Публикация APK и сайта автоматизирована через `Makefile`. ## Стек - Android приложение: **Kotlin** - Сборка: **Gradle** + `Gradle Wrapper` - Промо/лендинг сайт: **HTML + CSS + JS + Bootstrap + Bootstrap Icons** ## Концепция сети - Устройства действуют как BLE-ноды. - Сообщения передаются hop-by-hop (mesh-подход). - Каждый пакет имеет `messageId`, `ttl`, `senderId`, `timestamp`. - Узлы хранят кратковременный кэш, чтобы избегать дубликатов. - Доставка подтверждается ACK-пакетами. ## Основные компоненты Android-приложения 1. **BLE Transport Layer** - сканирование соседей; - реклама (advertising) своего присутствия; - установление BLE-соединений; - отправка/приём фрагментированных пакетов. 2. **Mesh Routing Layer** - пересылка пакетов с TTL; - фильтрация дублей; - политика повторных отправок. 3. **Messaging Layer** - личные сообщения; - список чатов и окно диалога; - статусы доставки (queued/sent/relayed/delivered). 4. **Data Layer** - локальное хранилище (Room); - история сообщений и очередь исходящей доставки. 5. **Security Layer** - идентификация пользователя; - шифрование сообщений (напр. E2E для приватных чатов); - защита от подмены/повтора пакетов. ## Этапы разработки (Roadmap) 1. Подготовка Android-проекта на Kotlin + Gradle. 2. Реализация BLE-обнаружения и рекламы узлов. 3. Реализация протокола пакетов (формат, TTL, ACK, дедупликация). 4. Базовый mesh-relay между 3+ устройствами. 5. Экран чатов и отправка текстовых сообщений. 6. Локальная БД (Room) и история сообщений. 7. Минимальное шифрование и валидация пакетов. 8. Тестирование в школьном сценарии (коридоры/классы/этажи). 9. Создание сайта проекта с описанием и кнопкой скачивания APK. 10. Подготовка релиза и документации для пилотного запуска. ## Задачи (Backlog) - [x] Инициализировать Android-проект (`app` модуль + базовый каркас репозитория). - [ ] Добавить Android-модули `domain`, `data`, `mesh`. - [x] Настроить `minSdk` и базовые BLE-permissions. - [x] Добавить foreground service для фоновой mesh-работы. - [x] Описать формат сетевого пакета (черновой JSON codec + модель пакета). - [x] Реализовать базовый BLE bootstrap (scanner + advertiser + runtime permissions). - [x] Реализовать минимальный GATT-обмен между BLE-узлами. - [x] Реализовать очередь отправки + ретраи + ACK timeout. - [x] Добавить защиту от дубликатов по `messageId` (in-memory cache, базово). - [x] Реализовать mesh-forwarding с ограничением TTL (routing action layer, базово). - [x] Добавить список чатов и базовый UI окна сообщений. - [x] Подключить Room и базовую схему хранения. - [x] Добавить логирование сети и debug-экран маршрутов. - [x] Добавить ручную проверку обновлений и опциональную автопроверку клиента. - [ ] Реализовать базовую регистрацию пользователя (локальный профиль). - [ ] Добавить шифрование полезной нагрузки сообщений. - [ ] Написать инструментальные тесты BLE-обмена. - [x] Создать сайт (`index.html`, `styles.css`, `app.js`) на Bootstrap. - [x] Добавить страницу скачивания APK и раздел документации. - [x] Подготовить CI-сборку (Gitea Actions `assembleDebug`). - [x] Собрать и опубликовать debug APK на сайте проекта. ## Предлагаемая структура репозитория - `android/` — Android-приложение (Kotlin + Gradle) - `website/` — сайт проекта (HTML/CSS/JS + Bootstrap) - `docs/` — документация протокола и архитектуры ## Автоматизация - `make client-build` — увеличить версию и собрать `debug` APK. - `make client-publish` — опубликовать собранный APK на сайт и обновить `version.json`. - `make publish` — увеличить версию, собрать APK, опубликовать клиент и перезагрузить `nginx`. - `make server-start|server-stop|server-restart|server-status|server-rebuild` — управление `nginx`. ## Лицензия Проект использует лицензию `GPL-3.0`. См. [LICENSE](/home/dom4k/nnnet/LICENSE). ## Ближайший следующий шаг Добавить профили пользователей, шифрование payload и инструментальные тесты BLE-обмена между несколькими устройствами.