Files
NNNet/README.md
dom4k 53fc4c1ff4
Some checks failed
Android CI / build (push) Has been cancelled
Replace GitHub Actions with Gitea workflow
2026-03-16 19:06:25 +00:00

96 lines
6.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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.