dom4k 9d37001e2b
Some checks failed
Android CI / build (push) Has been cancelled
Release v0.1.2
2026-03-16 20:04:32 +00:00
2026-03-16 20:04:32 +00:00
2026-03-16 20:01:21 +00:00
2026-03-16 20:01:21 +00:00

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)

  • Инициализировать Android-проект (app модуль + базовый каркас репозитория).
  • Добавить Android-модули domain, data, mesh.
  • Настроить minSdk и базовые BLE-permissions.
  • Добавить foreground service для фоновой mesh-работы.
  • Описать формат сетевого пакета (черновой JSON codec + модель пакета).
  • Реализовать базовый BLE bootstrap (scanner + advertiser + runtime permissions).
  • Реализовать минимальный GATT-обмен между BLE-узлами.
  • Реализовать очередь отправки + ретраи + ACK timeout.
  • Добавить защиту от дубликатов по messageId (in-memory cache, базово).
  • Реализовать mesh-forwarding с ограничением TTL (routing action layer, базово).
  • Добавить список чатов и базовый UI окна сообщений.
  • Подключить Room и базовую схему хранения.
  • Добавить логирование сети и debug-экран маршрутов.
  • Добавить ручную проверку обновлений и опциональную автопроверку клиента.
  • Реализовать базовую регистрацию пользователя (локальный профиль).
  • Добавить шифрование полезной нагрузки сообщений.
  • Написать инструментальные тесты BLE-обмена.
  • Создать сайт (index.html, styles.css, app.js) на Bootstrap.
  • Добавить страницу скачивания APK и раздел документации.
  • Подготовить CI-сборку (Gitea Actions assembleDebug).
  • Собрать и опубликовать 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.

Ближайший следующий шаг

Добавить профили пользователей, шифрование payload и инструментальные тесты BLE-обмена между несколькими устройствами.

Description
Mesh P2P сеть на базе BLE.
https://net.nnn-team.pro
Readme 333 KiB
Languages
Kotlin 90%
HTML 3.6%
Shell 2.3%
JavaScript 2.1%
Makefile 1.6%
Other 0.4%