Files
NNNet/README.md
dom4k f57f4716a5
Some checks failed
Android CI / build (push) Has been cancelled
Automate version tags for each build
2026-03-16 20:01:21 +00:00

109 lines
7.3 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.

# 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 и создать git-тег `vX.Y.Z`.
- `make client-tag` — создать git-тег для текущей версии вручную.
- `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-обмена между несколькими устройствами.