# didim99/filetransfer architecture

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

## Overview

FileTransfer is a Swing LAN peer-to-peer file-sharing app. Users add local files, connect to discover peers, select a peer and request a remote file; the app chooses a save location, coordinates transfer, and displays local and remote file lists and connection status. The graph separates UI/application coordination, file-list management, peer discovery and messaging, and the transfer protocol. Several network and file-state modules are represented from the source index and tree; their internal call paths are not inferred where excerpts do not show them.

Main entry points: [`src/ru/didim99/tstu/filetransfer/core/network/NetworkManager.java`](https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/network/NetworkManager.java) (Network manager), [`src/ru/didim99/tstu/filetransfer/ui/MainWindow.java`](https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/ui/MainWindow.java) (Main window), [`src/ru/didim99/tstu/filetransfer/core/Application.java`](https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/Application.java) (Application), [`src/ru/didim99/tstu/filetransfer/core/file/FileManager.java`](https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/file/FileManager.java) (File manager)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ui["User interface"]
  node_window["Main window<br/>[MainWindow.java]"]
  node_file_renderers["List renderers"]
  node_remote_renderer["Remote renderer"]
  node_peer_renderer["Peer renderer"]
end

subgraph group_app["Application coordination"]
  node_application["Application<br/>[Application.java]"]
  node_app_events["App event contract"]
  node_status["Status publisher"]
end

subgraph group_files["File management"]
  node_file_manager["File manager<br/>[FileManager.java]"]
  node_file_events["File event contract"]
  node_file_list_info["File list updates<br/>[FileListInfo.java]"]
  node_file_state["Local file state<br/>[FileState.java]"]
  node_remote_file_state["Remote file state"]
end

subgraph group_network["Peer networking"]
  node_network_manager["Network manager"]
  node_peer_searcher["Peer search<br/>[PeerSearcher.java]"]
  node_broadcast_sender["Broadcast sender"]
  node_peer_manager["Peer manager<br/>[PeerManager.java]"]
  node_peer["Peer session<br/>[Peer.java]"]
  node_peer_info["Peer metadata<br/>[PeerInfo.java]"]
  node_transfer["Transfer controller"]
end

node_user(("User"))
node_lan(("LAN peers"))

node_user -->|"uses"| node_window
node_window -->|"dispatches events"| node_app_events
node_application -->|"creates"| node_window
node_application -->|"creates"| node_file_manager
node_application -->|"creates"| node_network_manager
node_application -->|"adds and clears files"| node_file_manager
node_application -->|"starts discovery"| node_network_manager
node_application -->|"routes downloads"| node_network_manager
node_application -->|"updates file list"| node_window
node_network_manager -->|"publishes status"| node_status
node_network_manager -->|"manages peers"| node_peer_manager
node_network_manager -->|"starts search"| node_peer_searcher
node_network_manager -->|"starts broadcast"| node_broadcast_sender
node_peer_searcher -->|"reports peers"| node_network_manager
node_peer_searcher -->|"checks peers"| node_peer_manager
node_network_manager -->|"discovers peers"| node_lan
node_peer_manager -.->|"manages sessions"| node_peer
node_peer -->|"exchanges messages"| node_lan
node_peer -->|"creates controller"| node_transfer
node_peer -->|"registers listener"| node_file_manager
node_file_manager -->|"registers controller"| node_transfer
node_file_manager -->|"starts upload"| node_transfer
node_transfer -->|"transfers file data"| node_lan
node_file_manager -->|"builds updates"| node_file_list_info
node_file_manager -->|"notifies listeners"| node_file_events
node_peer -->|"sends updates"| node_file_list_info
node_window -->|"renders local files"| node_file_renderers
node_window -->|"renders remote files"| node_remote_renderer
node_window -->|"renders peers"| node_peer_renderer
node_file_renderers -->|"renders"| node_file_state
node_remote_renderer -->|"renders"| node_remote_file_state
node_peer_renderer -->|"renders"| node_peer_info
node_network_manager -->|"updates status and peers"| node_window

click node_window "https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/ui/MainWindow.java"
click node_file_renderers "https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/ui/FileListRenderer.java"
click node_remote_renderer "https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/ui/RemoteFileListRenderer.java"
click node_peer_renderer "https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/ui/PeerListRenderer.java"
click node_application "https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/Application.java"
click node_app_events "https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/AppEventListener.java"
click node_status "https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/StatusPublisher.java"
click node_file_manager "https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/file/FileManager.java"
click node_file_events "https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/file/FileEventListener.java"
click node_file_list_info "https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/file/FileListInfo.java"
click node_file_state "https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/file/FileState.java"
click node_remote_file_state "https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/file/RemoteFileState.java"
click node_network_manager "https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/network/NetworkManager.java"
click node_peer_searcher "https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/network/PeerSearcher.java"
click node_broadcast_sender "https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/network/BroadcastSender.java"
click node_peer_manager "https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/network/PeerManager.java"
click node_peer "https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/network/Peer.java"
click node_peer_info "https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/network/PeerInfo.java"
click node_transfer "https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/network/TransferController.java"

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_window,node_file_renderers,node_remote_renderer,node_peer_renderer,node_user toneBlue
class node_application,node_app_events,node_status toneAmber
class node_file_manager,node_file_events,node_file_list_info,node_file_state,node_remote_file_state toneMint
class node_network_manager,node_peer_searcher,node_broadcast_sender,node_peer_manager,node_peer,node_peer_info,node_transfer toneRose
class node_lan toneIndigo
```

## Components

### User interface

- [Main window](https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/ui/MainWindow.java): `src/ru/didim99/tstu/filetransfer/ui/MainWindow.java`
- [List renderers](https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/ui/FileListRenderer.java): `src/ru/didim99/tstu/filetransfer/ui/FileListRenderer.java`
- [Remote renderer](https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/ui/RemoteFileListRenderer.java): `src/ru/didim99/tstu/filetransfer/ui/RemoteFileListRenderer.java`
- [Peer renderer](https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/ui/PeerListRenderer.java): `src/ru/didim99/tstu/filetransfer/ui/PeerListRenderer.java`

### Application coordination

- [Application](https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/Application.java): `src/ru/didim99/tstu/filetransfer/core/Application.java`
- [App event contract](https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/AppEventListener.java): `src/ru/didim99/tstu/filetransfer/core/AppEventListener.java`
- [Status publisher](https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/StatusPublisher.java): `src/ru/didim99/tstu/filetransfer/core/StatusPublisher.java`

### File management

- [File manager](https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/file/FileManager.java): `src/ru/didim99/tstu/filetransfer/core/file/FileManager.java`
- [File event contract](https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/file/FileEventListener.java): `src/ru/didim99/tstu/filetransfer/core/file/FileEventListener.java`
- [File list updates](https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/file/FileListInfo.java): `src/ru/didim99/tstu/filetransfer/core/file/FileListInfo.java`
- [Local file state](https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/file/FileState.java): `src/ru/didim99/tstu/filetransfer/core/file/FileState.java`
- [Remote file state](https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/file/RemoteFileState.java): `src/ru/didim99/tstu/filetransfer/core/file/RemoteFileState.java`

### Peer networking

- [Network manager](https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/network/NetworkManager.java): `src/ru/didim99/tstu/filetransfer/core/network/NetworkManager.java`
- [Peer search](https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/network/PeerSearcher.java): `src/ru/didim99/tstu/filetransfer/core/network/PeerSearcher.java`
- [Broadcast sender](https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/network/BroadcastSender.java): `src/ru/didim99/tstu/filetransfer/core/network/BroadcastSender.java`
- [Peer manager](https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/network/PeerManager.java): `src/ru/didim99/tstu/filetransfer/core/network/PeerManager.java`
- [Peer session](https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/network/Peer.java): `src/ru/didim99/tstu/filetransfer/core/network/Peer.java`
- [Peer metadata](https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/network/PeerInfo.java): `src/ru/didim99/tstu/filetransfer/core/network/PeerInfo.java`
- [Transfer controller](https://github.com/didim99/filetransfer/blob/master/src/ru/didim99/tstu/filetransfer/core/network/TransferController.java): `src/ru/didim99/tstu/filetransfer/core/network/TransferController.java`

### Other components

- **User**
- **LAN peers**

## Connections

- User → Main window: uses (evidence: `src/ru/didim99/tstu/filetransfer/ui/MainWindow.java`)
- Main window → App event contract: dispatches events (evidence: `src/ru/didim99/tstu/filetransfer/ui/MainWindow.java`)
- Application → Main window: creates (evidence: `src/ru/didim99/tstu/filetransfer/core/Application.java`)
- Application → File manager: creates (evidence: `src/ru/didim99/tstu/filetransfer/core/Application.java`)
- Application → Network manager: creates (evidence: `src/ru/didim99/tstu/filetransfer/core/Application.java`)
- Application → File manager: adds and clears files (evidence: `src/ru/didim99/tstu/filetransfer/core/Application.java`)
- Application → Network manager: starts discovery (evidence: `src/ru/didim99/tstu/filetransfer/core/Application.java`)
- Application → Network manager: routes downloads (evidence: `src/ru/didim99/tstu/filetransfer/core/Application.java`)
- Application → Main window: updates file list (evidence: `src/ru/didim99/tstu/filetransfer/core/Application.java`)
- Network manager → Status publisher: publishes status (evidence: `src/ru/didim99/tstu/filetransfer/core/network/NetworkManager.java`)
- Network manager → Peer manager: manages peers (evidence: `src/ru/didim99/tstu/filetransfer/core/network/NetworkManager.java`)
- Network manager → Peer search: starts search (evidence: `src/ru/didim99/tstu/filetransfer/core/network/NetworkManager.java`)
- Network manager → Broadcast sender: starts broadcast (evidence: `src/ru/didim99/tstu/filetransfer/core/network/NetworkManager.java`)
- Peer search → Network manager: reports peers (evidence: `src/ru/didim99/tstu/filetransfer/core/network/PeerSearcher.java`)
- Peer search → Peer manager: checks peers (evidence: `src/ru/didim99/tstu/filetransfer/core/network/PeerSearcher.java`)
- Network manager → LAN peers: discovers peers (evidence: `README.md`)
- Peer manager → Peer session: manages sessions
- Peer session → LAN peers: exchanges messages (evidence: `src/ru/didim99/tstu/filetransfer/core/network/Peer.java`)
- Peer session → Transfer controller: creates controller (evidence: `src/ru/didim99/tstu/filetransfer/core/network/Peer.java`)
- Peer session → File manager: registers listener (evidence: `src/ru/didim99/tstu/filetransfer/core/network/Peer.java`)
- File manager → Transfer controller: registers controller (evidence: `src/ru/didim99/tstu/filetransfer/core/file/FileManager.java`)
- File manager → Transfer controller: starts upload (evidence: `src/ru/didim99/tstu/filetransfer/core/file/FileManager.java`)
- Transfer controller → LAN peers: transfers file data (evidence: `src/ru/didim99/tstu/filetransfer/core/network/TransferController.java`)
- File manager → File list updates: builds updates (evidence: `src/ru/didim99/tstu/filetransfer/core/file/FileManager.java`)
- File manager → File event contract: notifies listeners (evidence: `src/ru/didim99/tstu/filetransfer/core/file/FileManager.java`)
- Peer session → File list updates: sends updates (evidence: `src/ru/didim99/tstu/filetransfer/core/network/Peer.java`)
- Main window → List renderers: renders local files (evidence: `src/ru/didim99/tstu/filetransfer/ui/MainWindow.java`)
- Main window → Remote renderer: renders remote files (evidence: `src/ru/didim99/tstu/filetransfer/ui/MainWindow.java`)
- Main window → Peer renderer: renders peers (evidence: `src/ru/didim99/tstu/filetransfer/ui/MainWindow.java`)
- List renderers → Local file state: renders (evidence: `src/ru/didim99/tstu/filetransfer/ui/FileListRenderer.java`)
- Remote renderer → Remote file state: renders (evidence: `src/ru/didim99/tstu/filetransfer/ui/RemoteFileListRenderer.java`)
- Peer renderer → Peer metadata: renders (evidence: `src/ru/didim99/tstu/filetransfer/ui/PeerListRenderer.java`)
- Network manager → Main window: updates status and peers (evidence: `src/ru/didim99/tstu/filetransfer/core/network/NetworkManager.java`)
