# School BLE Mesh Messenger Проект для школьного офлайн-месседжера на базе **BLE P2P mesh-сети**. ## Цель Создать систему общения между учениками и учителями без зависимости от интернета: - обмен сообщениями в пределах школы; - работа в условиях отсутствия Wi-Fi/мобильной сети; - безопасное взаимодействие с базовой модерацией. ## Стек - 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-узлами. - [ ] Реализовать очередь отправки + ретраи + ACK timeout. - [x] Добавить защиту от дубликатов по `messageId` (in-memory cache, базово). - [x] Реализовать mesh-forwarding с ограничением TTL (routing action layer, базово). - [ ] Добавить UI для списка чатов и окна сообщений. - [ ] Подключить Room и миграции схемы. - [x] Добавить логирование сети и debug-экран маршрутов. - [ ] Реализовать базовую регистрацию пользователя (локальный профиль). - [ ] Добавить шифрование полезной нагрузки сообщений. - [ ] Написать инструментальные тесты 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`. ## Ближайший следующий шаг Добавить очередь отправки, ACK timeout/retry и локальное хранение сообщений через Room.