commit 2ad5e03cb73ed98f5448280969b930ae9e6314b3 Author: dom4k Date: Mon Mar 16 19:04:20 2026 +0000 Initialize NNNet project structure and documentation diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..331b3e0 --- /dev/null +++ b/.gitignore @@ -0,0 +1,27 @@ +# Android / Gradle +.gradle/ +**/build/ +local.properties +.idea/ +*.iml +android/local.properties +captures/ +.cxx/ + +# OS +.DS_Store +Thumbs.db + +# Logs +*.log + +# Environment / temp +.env +.env.* +*.tmp +*.swp +*.swo + +# Published artifacts +website/downloads/ +website/assets/meta/version.json diff --git a/README.md b/README.md new file mode 100644 index 0000000..3bf90a7 --- /dev/null +++ b/README.md @@ -0,0 +1,95 @@ +# 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-сборку (GitHub 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. diff --git a/docs/ARCHITECTURE.md b/docs/ARCHITECTURE.md new file mode 100644 index 0000000..575f8d5 --- /dev/null +++ b/docs/ARCHITECTURE.md @@ -0,0 +1,25 @@ +# Архитектура School Mesh Messenger + +## Слои +- BLE Transport: сканирование, реклама, соединения, обмен пакетами. +- Mesh Layer: маршрутизация, TTL, дедупликация, ACK. +- Messaging Layer: чаты, статусы доставки, история. +- Storage Layer: Room для локального хранения. + +## Сетевой пакет (черновик) +```json +{ + "messageId": "uuid", + "senderId": "device-or-user-id", + "targetId": "user-or-group-id", + "ttl": 6, + "timestamp": 0, + "type": "message|ack|presence", + "payload": "base64-or-json" +} +``` + +## Ближайшие шаги +1. BLE discovery + advertising прототип. +2. Relay между 2-3 устройствами. +3. ACK/timeout/retry очередь.