# gsjsjzhznsz/bandqq architecture

> Architecture diagram of the GitHub repository gsjsjzhznsz/bandqq, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/gsjsjzhznsz/bandqq
- Repository: https://github.com/gsjsjzhznsz/bandqq

## Overview

BandQQ is a two-endpoint QQ messaging assistant: an Android synchronizer connects to a OneBot-compatible QQ gateway, preprocesses messages and contact data, then forwards them over Xiaomi’s interconnect channel to a Vela wearable client for viewing, replying, and history browsing. The README documents wearable features such as @me and poke indicators, mute controls, quick replies, and image receipt; the supplied tree exposes only the wearable client’s common API, protocol, and store modules, not its screens. Android wiring is based on the sampled SyncService and OneBot client excerpts; unsampled subsystem links are omitted where ownership is uncertain.

Main entry points: [`android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/sync/MessageBroker.kt`](https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/sync/MessageBroker.kt) (Message broker), [`android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/sync/SyncService.kt`](https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/sync/SyncService.kt) (Sync service), [`android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/onebot/OneBotClient.kt`](https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/onebot/OneBotClient.kt) (OneBot client), [`android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/sync/InterconnectBridge.kt`](https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/sync/InterconnectBridge.kt) (Interconnect bridge)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_android["Android synchronizer"]
  node_syncservice["Sync service<br/>[SyncService.kt]"]
  node_broker["Message broker<br/>[MessageBroker.kt]"]
  node_store[("Message history<br/>[MessageStore.kt]")]
  node_contacts[("Contact cache<br/>[ContactCache.kt]")]
  node_interconnect["Interconnect bridge"]
end

subgraph group_gateway["QQ gateway"]
  node_parser["OneBot parser<br/>[OneBotParser.kt]"]
  node_onebot["OneBot client<br/>[OneBotClient.kt]"]
end

subgraph group_wearable["Wearable client"]
  node_wearable["Vela client<br/>[store.js]"]
  node_protocol["Frame protocol<br/>[protocol.js]"]
  node_wearapi["Wearable API<br/>[api.js]"]
end

subgraph group_operations["App operations"]
  node_config[("Sync settings<br/>[ConfigManager.kt]")]
  node_logbus["Live log bus<br/>[LogBus.kt]"]
  node_filelogger["File logger<br/>[FileLogger.kt]"]
  node_androidui["Sync app UI<br/>[BandQQApp.kt]"]
  node_devtools["DevTools simulator<br/>[MainActivity.kt]"]
end

node_user(("Wearable user"))
node_qq(("QQ gateway"))

node_user -->|"views and replies"| node_wearable
node_syncservice -->|"loads settings"| node_config
node_syncservice -->|"starts client"| node_onebot
node_syncservice -->|"assembles"| node_broker
node_syncservice -->|"registers broker"| node_interconnect
node_qq -->|"events and API"| node_onebot
node_onebot -->|"delivers events"| node_parser
node_parser -->|"parses messages"| node_broker
node_broker -->|"requests and sends"| node_onebot
node_broker -->|"persists history"| node_store
node_broker -->|"resolves contacts"| node_contacts
node_broker -->|"pushes frames"| node_interconnect
node_interconnect -->|"transfers frames"| node_wearapi
node_wearapi -->|"encodes and decodes"| node_protocol
node_wearable -->|"updates and reads"| node_store
node_broker -->|"emits diagnostics"| node_logbus
node_logbus -->|"records logs"| node_filelogger
node_androidui -->|"edits settings"| node_config
node_devtools -.->|"simulates OneBot"| node_qq

click node_syncservice "https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/sync/SyncService.kt"
click node_parser "https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/onebot/OneBotParser.kt"
click node_onebot "https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/onebot/OneBotClient.kt"
click node_broker "https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/sync/MessageBroker.kt"
click node_store "https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/sync/MessageStore.kt"
click node_contacts "https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/sync/ContactCache.kt"
click node_interconnect "https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/sync/InterconnectBridge.kt"
click node_wearable "https://github.com/gsjsjzhznsz/bandqq/blob/main/band-qq/src/common/store.js"
click node_protocol "https://github.com/gsjsjzhznsz/bandqq/blob/main/band-qq/src/common/protocol.js"
click node_wearapi "https://github.com/gsjsjzhznsz/bandqq/blob/main/band-qq/src/common/api.js"
click node_config "https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/config/ConfigManager.kt"
click node_logbus "https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/sync/LogBus.kt"
click node_filelogger "https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/sync/FileLogger.kt"
click node_androidui "https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/ui/BandQQApp.kt"
click node_devtools "https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/devtools/src/main/java/io/github/gsjsjzhznsz/bandqq/devtools/MainActivity.kt"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_syncservice,node_broker,node_store,node_contacts,node_interconnect,node_user toneBlue
class node_parser,node_onebot toneAmber
class node_wearable,node_protocol,node_wearapi toneMint
class node_config,node_logbus,node_filelogger,node_androidui,node_devtools toneRose
class node_qq toneIndigo
```

## Components

### Android synchronizer

- [Sync service](https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/sync/SyncService.kt): `android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/sync/SyncService.kt`
- [Message broker](https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/sync/MessageBroker.kt): `android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/sync/MessageBroker.kt`
- [Message history](https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/sync/MessageStore.kt): `android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/sync/MessageStore.kt`
- [Contact cache](https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/sync/ContactCache.kt): `android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/sync/ContactCache.kt`
- [Interconnect bridge](https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/sync/InterconnectBridge.kt): `android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/sync/InterconnectBridge.kt`

### QQ gateway

- [OneBot parser](https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/onebot/OneBotParser.kt): `android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/onebot/OneBotParser.kt`
- [OneBot client](https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/onebot/OneBotClient.kt): `android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/onebot/OneBotClient.kt`

### Wearable client

- [Vela client](https://github.com/gsjsjzhznsz/bandqq/blob/main/band-qq/src/common/store.js): `band-qq/src/common/store.js`
- [Frame protocol](https://github.com/gsjsjzhznsz/bandqq/blob/main/band-qq/src/common/protocol.js): `band-qq/src/common/protocol.js`
- [Wearable API](https://github.com/gsjsjzhznsz/bandqq/blob/main/band-qq/src/common/api.js): `band-qq/src/common/api.js`

### App operations

- [Sync settings](https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/config/ConfigManager.kt): `android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/config/ConfigManager.kt`
- [Live log bus](https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/sync/LogBus.kt): `android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/sync/LogBus.kt`
- [File logger](https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/sync/FileLogger.kt): `android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/sync/FileLogger.kt`
- [Sync app UI](https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/ui/BandQQApp.kt): `android-sync/app/src/main/java/io/github/gsjsjzhznsz/bandqq/ui/BandQQApp.kt`
- [DevTools simulator](https://github.com/gsjsjzhznsz/bandqq/blob/main/android-sync/devtools/src/main/java/io/github/gsjsjzhznsz/bandqq/devtools/MainActivity.kt): `android-sync/devtools/src/main/java/io/github/gsjsjzhznsz/bandqq/devtools/MainActivity.kt`

### Other components

- **Wearable user**
- **QQ gateway**

## Connections

- Wearable user → Vela client: views and replies
- Sync service → Sync settings: loads settings
- Sync service → OneBot client: starts client
- Sync service → Message broker: assembles
- Sync service → Interconnect bridge: registers broker
- QQ gateway → OneBot client: events and API
- OneBot client → OneBot parser: delivers events
- OneBot parser → Message broker: parses messages
- Message broker → OneBot client: requests and sends
- Message broker → Message history: persists history
- Message broker → Contact cache: resolves contacts
- Message broker → Interconnect bridge: pushes frames
- Interconnect bridge → Wearable API: transfers frames
- Wearable API → Frame protocol: encodes and decodes
- Vela client → Message history: updates and reads
- Message broker → Live log bus: emits diagnostics
- Live log bus → File logger: records logs
- Sync app UI → Sync settings: edits settings
- DevTools simulator → QQ gateway: simulates OneBot
