Initialize NNNet project structure and documentation
This commit is contained in:
27
.gitignore
vendored
Normal file
27
.gitignore
vendored
Normal file
@@ -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
|
||||||
95
README.md
Normal file
95
README.md
Normal file
@@ -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.
|
||||||
25
docs/ARCHITECTURE.md
Normal file
25
docs/ARCHITECTURE.md
Normal file
@@ -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 очередь.
|
||||||
Reference in New Issue
Block a user