# ferdinaldopelembe/tcp-chat architecture

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

- Interactive diagram: https://gitdiagram.com/ferdinaldopelembe/tcp-chat
- Repository: https://github.com/ferdinaldopelembe/tcp-chat

## Overview

This is a terminal TCP chat: a participant enters a name and message, the client sends them to a central server, and the server broadcasts the formatted message to other connected clients. The client also displays its own message and keeps in-memory history; incoming messages are handled on a dedicated thread. The server’s accept, receive, and broadcast behavior is visible in its excerpt; client details and history are documented in the README but its implementation excerpt was unavailable. Bundled third-party headers are excluded as peripheral to the application.

Main entry points: [`client.cpp`](https://github.com/ferdinaldopelembe/tcp-chat/blob/main/client.cpp) (Chat client), [`server.cpp`](https://github.com/ferdinaldopelembe/tcp-chat/blob/main/server.cpp) (Message handler), [`src/message.cpp`](https://github.com/ferdinaldopelembe/tcp-chat/blob/main/src/message.cpp) (Message model), [`src/user.cpp`](https://github.com/ferdinaldopelembe/tcp-chat/blob/main/src/user.cpp) (User identity)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Client"]
  node_keyboard["Terminal input<br/>[client.cpp]"]
  node_client_app["Chat client<br/>[client.cpp]"]
  node_receiver["Receive thread<br/>[client.cpp]"]
  node_history[("Memory history<br/>[client.cpp]")]
  node_client_output["Terminal output<br/>[client.cpp]"]
end

subgraph group_server["Server"]
  node_listener["TCP listener<br/>[server.cpp]"]
  node_peer_sockets["Connected clients<br/>[server.cpp]"]
  node_message_handler["Message handler<br/>[server.cpp]"]
  node_broadcast["Broadcast<br/>[server.cpp]"]
end

subgraph group_shared["Shared chat model"]
  node_user["User identity<br/>[user.cpp]"]
  node_message["Message model<br/>[message.cpp]"]
end

node_participant(("Participant"))

node_participant -->|"enters messages"| node_keyboard
node_keyboard -->|"submits text"| node_client_app
node_client_app -->|"sets name"| node_user
node_client_app -->|"forms message"| node_message
node_client_app -->|"connects by TCP"| node_listener
node_client_app -->|"sends name and text"| node_message_handler
node_listener -->|"accepts clients"| node_peer_sockets
node_message_handler -->|"receives packets"| node_peer_sockets
node_message_handler -->|"constructs broadcast message"| node_message
node_message_handler -->|"dispatches message"| node_broadcast
node_broadcast -->|"sends to other clients"| node_peer_sockets
node_client_app -->|"shows own message"| node_client_output
node_receiver -->|"displays received messages"| node_client_output
node_receiver -->|"updates history"| node_history
node_client_app -->|"receives concurrently"| node_receiver
node_client_output -->|"displays chat"| node_participant

click node_keyboard "https://github.com/ferdinaldopelembe/tcp-chat/blob/main/client.cpp"
click node_client_app "https://github.com/ferdinaldopelembe/tcp-chat/blob/main/client.cpp"
click node_receiver "https://github.com/ferdinaldopelembe/tcp-chat/blob/main/client.cpp"
click node_history "https://github.com/ferdinaldopelembe/tcp-chat/blob/main/client.cpp"
click node_client_output "https://github.com/ferdinaldopelembe/tcp-chat/blob/main/client.cpp"
click node_user "https://github.com/ferdinaldopelembe/tcp-chat/blob/main/src/user.cpp"
click node_message "https://github.com/ferdinaldopelembe/tcp-chat/blob/main/src/message.cpp"
click node_listener "https://github.com/ferdinaldopelembe/tcp-chat/blob/main/server.cpp"
click node_peer_sockets "https://github.com/ferdinaldopelembe/tcp-chat/blob/main/server.cpp"
click node_message_handler "https://github.com/ferdinaldopelembe/tcp-chat/blob/main/server.cpp"
click node_broadcast "https://github.com/ferdinaldopelembe/tcp-chat/blob/main/server.cpp"

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_keyboard,node_client_app,node_receiver,node_history,node_client_output toneBlue
class node_listener,node_peer_sockets,node_message_handler,node_broadcast toneAmber
class node_user,node_message toneMint
class node_participant toneIndigo
```

## Components

### Client

- [Terminal input](https://github.com/ferdinaldopelembe/tcp-chat/blob/main/client.cpp): `client.cpp`
- [Chat client](https://github.com/ferdinaldopelembe/tcp-chat/blob/main/client.cpp): `client.cpp`
- [Receive thread](https://github.com/ferdinaldopelembe/tcp-chat/blob/main/client.cpp): `client.cpp`
- [Memory history](https://github.com/ferdinaldopelembe/tcp-chat/blob/main/client.cpp): `client.cpp`
- [Terminal output](https://github.com/ferdinaldopelembe/tcp-chat/blob/main/client.cpp): `client.cpp`

### Server

- [TCP listener](https://github.com/ferdinaldopelembe/tcp-chat/blob/main/server.cpp): `server.cpp`
- [Connected clients](https://github.com/ferdinaldopelembe/tcp-chat/blob/main/server.cpp): `server.cpp`
- [Message handler](https://github.com/ferdinaldopelembe/tcp-chat/blob/main/server.cpp): `server.cpp`
- [Broadcast](https://github.com/ferdinaldopelembe/tcp-chat/blob/main/server.cpp): `server.cpp`

### Shared chat model

- [User identity](https://github.com/ferdinaldopelembe/tcp-chat/blob/main/src/user.cpp): `src/user.cpp`
- [Message model](https://github.com/ferdinaldopelembe/tcp-chat/blob/main/src/message.cpp): `src/message.cpp`

### Other components

- **Participant**

## Connections

- Participant → Terminal input: enters messages
- Terminal input → Chat client: submits text (evidence: `client.cpp`)
- Chat client → User identity: sets name
- Chat client → Message model: forms message
- Chat client → TCP listener: connects by TCP
- Chat client → Message handler: sends name and text
- TCP listener → Connected clients: accepts clients (evidence: `server.cpp`)
- Message handler → Connected clients: receives packets (evidence: `server.cpp`)
- Message handler → Message model: constructs broadcast message (evidence: `server.cpp`)
- Message handler → Broadcast: dispatches message (evidence: `server.cpp`)
- Broadcast → Connected clients: sends to other clients (evidence: `server.cpp`)
- Chat client → Terminal output: shows own message (evidence: `client.cpp`)
- Receive thread → Terminal output: displays received messages (evidence: `client.cpp`)
- Receive thread → Memory history: updates history (evidence: `client.cpp`)
- Chat client → Receive thread: receives concurrently (evidence: `client.cpp`)
- Terminal output → Participant: displays chat
