This commit is contained in:
CC
2026-06-10 14:14:28 +02:00
parent 2bd2751a6a
commit fc38a8c6b6
57 changed files with 1157 additions and 621 deletions
+69
View File
@@ -0,0 +1,69 @@
# Mesh Core Refactor Plan
Goal: unify BLE + Wi-Fi Aware mesh services behind a shared core to reduce duplication, improve readability, and make auditing easier without changing runtime behavior.
## Phase 0: Inventory + Guardrails
- [x] Capture current public API surface used by UI/services (identify required methods/properties).
- [x] Identify transport-specific responsibilities vs shared mesh-core logic.
- [x] Decide how to share GossipSyncManager (keep existing holder behavior unless explicitly improved).
## Phase 1: Shared Types + Utilities
- [x] Introduce `MeshDelegate` in `com.bitchat.android.mesh` and make both BLE/WiFi delegates type-alias it.
- [x] Add `MeshTransport` interface to abstract local transport send/unicast and optional info hooks.
- [x] Extract `MeshPacketUtils` (hex id parsing, sha256 helper) used by both services.
- [x] Add unit tests for `MeshPacketUtils` (hex parsing + sha256 stability).
## Phase 2: MeshCore (Shared Coordinator)
- [x] Create `MeshCore` with shared managers (Peer/Fragment/Security/StoreForward/Message/Packet).
- [x] Move shared delegate wiring into `MeshCore` with hooks for transport-specific behavior:
- onMessageReceived (BLE notification / AppStateStore)
- onPeerIdBinding (BLE favorites mapping)
- onAnnounceProcessed (BLE first-announce address map)
- [x] Centralize shared packet signing + announce/leave creation.
- [x] Centralize message/file/read-receipt senders (public + private).
- [x] Expose helper methods for peer info, session state, debug info, and panic-mode clearing.
## Phase 3: BluetoothMeshService Integration
- [x] Replace duplicated core fields with a single `MeshCore` instance.
- [x] Wire `BluetoothConnectionManager` callbacks into `MeshCore` packet ingestion.
- [x] Move periodic announce + gossip start/stop into `MeshCore` usage.
- [x] Preserve BLE-only behaviors (connection manager control, background notifications).
- [x] Keep `MeshServiceHolder` semantics intact (reusability + shared gossip manager).
## Phase 4: WifiAwareMeshService Integration
- [x] Replace duplicated core fields with a `MeshCore` instance.
- [x] Route WiFi socket RX into `MeshCore` packet ingestion.
- [x] Keep WiFi aware discovery/connection logic transport-specific.
- [x] Ensure gossip sync usage matches current shared behavior.
## Phase 5: Cleanup + Consistency
- [x] Remove legacy duplicate helpers + delegates from both services.
- [x] Ensure debug status output stays consistent (core + transport sections).
- [x] Confirm behavior parity for announce/leave + handshake flows.
## Phase 6: Tests + Verification
- [x] Run unit tests: `./gradlew test` (or targeted if full suite is too slow).
- [x] If new tests fail, iterate until green.
## Status Tracking
- [x] Phase 0 complete
- [x] Phase 1 complete
- [x] Phase 2 complete
- [x] Phase 3 complete
- [x] Phase 4 complete
- [x] Phase 5 complete
- [x] Phase 6 complete
## Post-Refactor Review Findings (2025-02-XX)
Findings (confirmed issues to fix):
- Shared `GossipSyncManager` is stopped when WiFi Aware stops, even if BLE is still active.
- Shared `GossipSyncManager` unicast (`sendPacketToPeer`) only reaches BLE peers; WiFi Aware peers miss initial sync.
- Read receipts are sent only via BLE in UI paths; WiFi Aware-only sessions never send receipts.
TODO (fix plan):
- [x] MeshCore: guard `gossipSyncManager.start/stop` so only the owner transport controls lifecycle.
- [x] TransportBridgeService: add unicast forwarding across transports; update BLE/WiFi transport layers to support it.
- [x] MeshCore: when owning gossip manager, forward unicast sync packets to other transports via bridge.
- [x] UI: route read receipts via BLE if session established, else via WiFi Aware when available.
- [x] Tests: add unit tests for `TransportBridgeService` unicast forwarding and run them.