# aarenrishikdevloper/torrent-client architecture

> Architecture diagram of the GitHub repository aarenrishikdevloper/torrent-client, 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/aarenrishikdevloper/torrent-client
- Repository: https://github.com/aarenrishikdevloper/torrent-client

## Overview

This is a C++ BitTorrent command-line client. A user supplies a torrent file and download directory; the CLI constructs TorrentClient, which parses metadata, discovers peers through trackers, manages peer connections and piece downloads, verifies and writes completed pieces, and reports progress. Tracker refresh and worker-thread coordination are also part of the client workflow. The parser’s bencoding and hashing support is shown as an internal layer. Several peer-protocol modules are present in the tree, but their implementation was not sampled, so their detailed wiring is not asserted.

Main entry points: [`core/TorrentClient.cc`](https://github.com/aarenrishikdevloper/torrent-client/blob/main/core/TorrentClient.cc) (Torrent client), [`core/PeerRetrieval.cc`](https://github.com/aarenrishikdevloper/torrent-client/blob/main/core/PeerRetrieval.cc) (Tracker discovery), [`core/PeerConnection.cc`](https://github.com/aarenrishikdevloper/torrent-client/blob/main/core/PeerConnection.cc) (Peer connection), [`core/TorenParser.cc`](https://github.com/aarenrishikdevloper/torrent-client/blob/main/core/TorenParser.cc) (Torrent parser)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_entry["CLI and orchestration"]
  node_cli["CLI<br/>[main.cc]"]
  node_client["Torrent client<br/>[TorrentClient.cc]"]
end

subgraph group_metadata["Torrent metadata"]
  node_parser["Torrent parser<br/>[TorenParser.cc]"]
  node_bencoder["Bencode codec<br/>[bencoder.hpp]"]
  node_utils["Hash utilities<br/>[utils.cc]"]
end

subgraph group_network["Peer discovery and transfer"]
  node_tracker["Tracker discovery<br/>[PeerRetrieval.cc]"]
  node_peer_queue["Peer queue<br/>[PeerQueue.cc]"]
  node_peer_connection["Peer connection<br/>[PeerConnection.cc]"]
  node_message["Peer messages<br/>[Message.cc]"]
end

subgraph group_download["Piece assembly"]
  node_piece_manager["Piece manager<br/>[PieceManager.cc]"]
  node_piece["Piece blocks<br/>[Piece.cc]"]
  node_progress["Progress display<br/>[PieceManager.cc]"]
end

node_user(("User"))
node_tracker_service(("BitTorrent trackers"))
node_peer_service(("BitTorrent peers"))
node_download_files[("Downloaded files")]

node_user -->|"provides paths"| node_cli
node_cli -->|"starts"| node_client
node_client -->|"constructs"| node_parser
node_parser -->|"decodes metadata"| node_bencoder
node_parser -->|"hashes info"| node_utils
node_client -->|"requests peers"| node_tracker
node_tracker -->|"reads torrent data"| node_parser
node_tracker -->|"announces"| node_tracker_service
node_tracker -->|"returns peers"| node_peer_queue
node_client -->|"adds peers"| node_peer_queue
node_client -->|"starts workers"| node_peer_connection
node_peer_connection -->|"takes peers"| node_peer_queue
node_peer_connection -->|"exchanges data"| node_peer_service
node_peer_connection -->|"submits blocks"| node_piece_manager
node_piece_manager -->|"assembles blocks"| node_piece
node_piece_manager -->|"writes verified data"| node_download_files
node_client -->|"checks completion"| node_piece_manager
node_client -->|"starts tracking"| node_progress

click node_cli "https://github.com/aarenrishikdevloper/torrent-client/blob/main/apps/cli/main.cc"
click node_client "https://github.com/aarenrishikdevloper/torrent-client/blob/main/core/TorrentClient.cc"
click node_parser "https://github.com/aarenrishikdevloper/torrent-client/blob/main/core/TorenParser.cc"
click node_bencoder "https://github.com/aarenrishikdevloper/torrent-client/blob/main/bencoder/bencoder.hpp"
click node_utils "https://github.com/aarenrishikdevloper/torrent-client/blob/main/core/utils.cc"
click node_tracker "https://github.com/aarenrishikdevloper/torrent-client/blob/main/core/PeerRetrieval.cc"
click node_peer_queue "https://github.com/aarenrishikdevloper/torrent-client/blob/main/core/PeerQueue.cc"
click node_peer_connection "https://github.com/aarenrishikdevloper/torrent-client/blob/main/core/PeerConnection.cc"
click node_message "https://github.com/aarenrishikdevloper/torrent-client/blob/main/core/Message.cc"
click node_piece_manager "https://github.com/aarenrishikdevloper/torrent-client/blob/main/core/PieceManager.cc"
click node_piece "https://github.com/aarenrishikdevloper/torrent-client/blob/main/core/Piece.cc"
click node_progress "https://github.com/aarenrishikdevloper/torrent-client/blob/main/core/PieceManager.cc"

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_cli,node_client,node_user toneBlue
class node_parser,node_bencoder,node_utils,node_download_files toneAmber
class node_tracker,node_peer_queue,node_peer_connection,node_message toneMint
class node_piece_manager,node_piece,node_progress toneRose
class node_tracker_service,node_peer_service toneIndigo
```

## Components

### CLI and orchestration

- [CLI](https://github.com/aarenrishikdevloper/torrent-client/blob/main/apps/cli/main.cc): `apps/cli/main.cc`
- [Torrent client](https://github.com/aarenrishikdevloper/torrent-client/blob/main/core/TorrentClient.cc): `core/TorrentClient.cc`

### Torrent metadata

- [Torrent parser](https://github.com/aarenrishikdevloper/torrent-client/blob/main/core/TorenParser.cc): `core/TorenParser.cc`
- [Bencode codec](https://github.com/aarenrishikdevloper/torrent-client/blob/main/bencoder/bencoder.hpp): `bencoder/bencoder.hpp`
- [Hash utilities](https://github.com/aarenrishikdevloper/torrent-client/blob/main/core/utils.cc): `core/utils.cc`

### Peer discovery and transfer

- [Tracker discovery](https://github.com/aarenrishikdevloper/torrent-client/blob/main/core/PeerRetrieval.cc): `core/PeerRetrieval.cc`
- [Peer queue](https://github.com/aarenrishikdevloper/torrent-client/blob/main/core/PeerQueue.cc): `core/PeerQueue.cc`
- [Peer connection](https://github.com/aarenrishikdevloper/torrent-client/blob/main/core/PeerConnection.cc): `core/PeerConnection.cc`
- [Peer messages](https://github.com/aarenrishikdevloper/torrent-client/blob/main/core/Message.cc): `core/Message.cc`

### Piece assembly

- [Piece manager](https://github.com/aarenrishikdevloper/torrent-client/blob/main/core/PieceManager.cc): `core/PieceManager.cc`
- [Piece blocks](https://github.com/aarenrishikdevloper/torrent-client/blob/main/core/Piece.cc): `core/Piece.cc`
- [Progress display](https://github.com/aarenrishikdevloper/torrent-client/blob/main/core/PieceManager.cc): `core/PieceManager.cc`

### Other components

- **User**
- **BitTorrent trackers**
- **BitTorrent peers**
- **Downloaded files**

## Connections

- User → CLI: provides paths
- CLI → Torrent client: starts
- Torrent client → Torrent parser: constructs
- Torrent parser → Bencode codec: decodes metadata
- Torrent parser → Hash utilities: hashes info
- Torrent client → Tracker discovery: requests peers
- Tracker discovery → Torrent parser: reads torrent data
- Tracker discovery → BitTorrent trackers: announces
- Tracker discovery → Peer queue: returns peers
- Torrent client → Peer queue: adds peers
- Torrent client → Peer connection: starts workers
- Peer connection → Peer queue: takes peers
- Peer connection → BitTorrent peers: exchanges data
- Peer connection → Piece manager: submits blocks
- Piece manager → Piece blocks: assembles blocks
- Piece manager → Downloaded files: writes verified data
- Torrent client → Piece manager: checks completion
- Torrent client → Progress display: starts tracking
