# rhythm113/cse215l architecture

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

- Interactive diagram: https://gitdiagram.com/rhythm113/cse215l
- Repository: https://github.com/rhythm113/cse215l

## Overview

CSE215L is a peer-to-peer file-transfer project with Android and desktop Java implementations. The Android workflow starts at the home screen, branches to sending or receiving, and transfers files over a local socket using a pairing code; the receiver rebuilds files from transferred parts. File splitting, metadata, and cleanup form a separate internal file-processing layer. The README gives no further capability detail, and the excerpts do not show all UI-to-network wiring, so those links are omitted rather than inferred.

Main entry points: [`core/File/app/src/main/java/com/cse215l/p2p/FileServer.java`](https://github.com/rhythm113/cse215l/blob/main/core/File/app/src/main/java/com/cse215l/p2p/FileServer.java) (Socket server), [`core/FileTrasnsfer/src/main/java/cse215l/p2p/filetrasnsfer/FileServer.java`](https://github.com/rhythm113/cse215l/blob/main/core/FileTrasnsfer/src/main/java/cse215l/p2p/filetrasnsfer/FileServer.java) (Desktop server), [`core/File/app/src/main/java/com/cse215l/p2p/MainActivity.java`](https://github.com/rhythm113/cse215l/blob/main/core/File/app/src/main/java/com/cse215l/p2p/MainActivity.java) (Home screen), [`core/File/app/src/main/java/com/cse215l/p2p/SenderActivity.java`](https://github.com/rhythm113/cse215l/blob/main/core/File/app/src/main/java/com/cse215l/p2p/SenderActivity.java) (Send screen)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_android_ui["Android app"]
  node_home["Home screen<br/>[MainActivity.java]"]
  node_send_ui["Send screen"]
  node_receive_ui["Receive screen<br/>[RcvActivity.java]"]
end

subgraph group_android_transfer["Android transfer"]
  node_android_client["Socket client<br/>[FileClient.java]"]
  node_android_server["Socket server<br/>[FileServer.java]"]
end

subgraph group_file_processing["File processing"]
  node_file_util["File utilities<br/>[FileUtil.java]"]
  node_file_split["Split and rebuild<br/>[FileServ.java]"]
end

subgraph group_desktop_app["Desktop app"]
  node_desktop_main["Desktop entry<br/>[FileTrasnsfer.java]"]
  node_desktop_send["Desktop sender UI<br/>[SenderGUI.java]"]
  node_desktop_receive["Desktop receiver UI<br/>[ReceiverGUI.java]"]
  node_desktop_client["Desktop client<br/>[FileClient.java]"]
  node_desktop_server["Desktop server<br/>[FileServer.java]"]
  node_desktop_split["Desktop file processing<br/>[FileServ.java]"]
  node_desktop_utils["Desktop utilities<br/>[Utils.java]"]
end

node_user(("User"))
node_android_peer(("Peer device"))

node_user -->|"opens app"| node_home
node_home -->|"opens sender"| node_send_ui
node_home -->|"opens receiver"| node_receive_ui
node_user -->|"selects files"| node_send_ui
node_send_ui -->|"uses utilities"| node_file_util
node_receive_ui -->|"starts server"| node_android_server
node_android_server -->|"rebuilds parts"| node_file_split
node_android_server -->|"gets storage path"| node_file_util
node_android_client -->|"sends files"| node_android_peer
node_android_server -->|"receives files"| node_android_peer
node_desktop_main -.->|"launches sender"| node_desktop_send
node_desktop_main -.->|"launches receiver"| node_desktop_receive
node_desktop_client -->|"logs status"| node_desktop_send
node_desktop_server -->|"rebuilds parts"| node_desktop_split
node_desktop_server -->|"logs status"| node_desktop_receive
node_desktop_client -.->|"sends files"| node_android_peer
node_desktop_server -.->|"receives files"| node_android_peer

click node_home "https://github.com/rhythm113/cse215l/blob/main/core/File/app/src/main/java/com/cse215l/p2p/MainActivity.java"
click node_send_ui "https://github.com/rhythm113/cse215l/blob/main/core/File/app/src/main/java/com/cse215l/p2p/SenderActivity.java"
click node_receive_ui "https://github.com/rhythm113/cse215l/blob/main/core/File/app/src/main/java/com/cse215l/p2p/RcvActivity.java"
click node_file_util "https://github.com/rhythm113/cse215l/blob/main/core/File/app/src/main/java/com/cse215l/p2p/FileUtil.java"
click node_file_split "https://github.com/rhythm113/cse215l/blob/main/core/File/app/src/main/java/com/cse215l/p2p/FileServ.java"
click node_android_client "https://github.com/rhythm113/cse215l/blob/main/core/File/app/src/main/java/com/cse215l/p2p/FileClient.java"
click node_android_server "https://github.com/rhythm113/cse215l/blob/main/core/File/app/src/main/java/com/cse215l/p2p/FileServer.java"
click node_desktop_main "https://github.com/rhythm113/cse215l/blob/main/core/FileTrasnsfer/src/main/java/cse215l/p2p/filetrasnsfer/FileTrasnsfer.java"
click node_desktop_send "https://github.com/rhythm113/cse215l/blob/main/core/FileTrasnsfer/src/main/java/cse215l/p2p/filetrasnsfer/SenderGUI.java"
click node_desktop_receive "https://github.com/rhythm113/cse215l/blob/main/core/FileTrasnsfer/src/main/java/cse215l/p2p/filetrasnsfer/ReceiverGUI.java"
click node_desktop_client "https://github.com/rhythm113/cse215l/blob/main/core/FileTrasnsfer/src/main/java/cse215l/p2p/filetrasnsfer/FileClient.java"
click node_desktop_server "https://github.com/rhythm113/cse215l/blob/main/core/FileTrasnsfer/src/main/java/cse215l/p2p/filetrasnsfer/FileServer.java"
click node_desktop_split "https://github.com/rhythm113/cse215l/blob/main/core/FileTrasnsfer/src/main/java/cse215l/p2p/filetrasnsfer/FileServ.java"
click node_desktop_utils "https://github.com/rhythm113/cse215l/blob/main/core/FileTrasnsfer/src/main/java/cse215l/p2p/filetrasnsfer/Utils.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_home,node_send_ui,node_receive_ui,node_user toneBlue
class node_android_client,node_android_server toneAmber
class node_file_util,node_file_split toneMint
class node_desktop_main,node_desktop_send,node_desktop_receive,node_desktop_client,node_desktop_server,node_desktop_split,node_desktop_utils toneRose
class node_android_peer toneIndigo
```

## Components

### Android app

- [Home screen](https://github.com/rhythm113/cse215l/blob/main/core/File/app/src/main/java/com/cse215l/p2p/MainActivity.java): `core/File/app/src/main/java/com/cse215l/p2p/MainActivity.java`
- [Send screen](https://github.com/rhythm113/cse215l/blob/main/core/File/app/src/main/java/com/cse215l/p2p/SenderActivity.java): `core/File/app/src/main/java/com/cse215l/p2p/SenderActivity.java`
- [Receive screen](https://github.com/rhythm113/cse215l/blob/main/core/File/app/src/main/java/com/cse215l/p2p/RcvActivity.java): `core/File/app/src/main/java/com/cse215l/p2p/RcvActivity.java`

### Android transfer

- [Socket client](https://github.com/rhythm113/cse215l/blob/main/core/File/app/src/main/java/com/cse215l/p2p/FileClient.java): `core/File/app/src/main/java/com/cse215l/p2p/FileClient.java`
- [Socket server](https://github.com/rhythm113/cse215l/blob/main/core/File/app/src/main/java/com/cse215l/p2p/FileServer.java): `core/File/app/src/main/java/com/cse215l/p2p/FileServer.java`

### File processing

- [File utilities](https://github.com/rhythm113/cse215l/blob/main/core/File/app/src/main/java/com/cse215l/p2p/FileUtil.java): `core/File/app/src/main/java/com/cse215l/p2p/FileUtil.java`
- [Split and rebuild](https://github.com/rhythm113/cse215l/blob/main/core/File/app/src/main/java/com/cse215l/p2p/FileServ.java): `core/File/app/src/main/java/com/cse215l/p2p/FileServ.java`

### Desktop app

- [Desktop entry](https://github.com/rhythm113/cse215l/blob/main/core/FileTrasnsfer/src/main/java/cse215l/p2p/filetrasnsfer/FileTrasnsfer.java): `core/FileTrasnsfer/src/main/java/cse215l/p2p/filetrasnsfer/FileTrasnsfer.java`
- [Desktop sender UI](https://github.com/rhythm113/cse215l/blob/main/core/FileTrasnsfer/src/main/java/cse215l/p2p/filetrasnsfer/SenderGUI.java): `core/FileTrasnsfer/src/main/java/cse215l/p2p/filetrasnsfer/SenderGUI.java`
- [Desktop receiver UI](https://github.com/rhythm113/cse215l/blob/main/core/FileTrasnsfer/src/main/java/cse215l/p2p/filetrasnsfer/ReceiverGUI.java): `core/FileTrasnsfer/src/main/java/cse215l/p2p/filetrasnsfer/ReceiverGUI.java`
- [Desktop client](https://github.com/rhythm113/cse215l/blob/main/core/FileTrasnsfer/src/main/java/cse215l/p2p/filetrasnsfer/FileClient.java): `core/FileTrasnsfer/src/main/java/cse215l/p2p/filetrasnsfer/FileClient.java`
- [Desktop server](https://github.com/rhythm113/cse215l/blob/main/core/FileTrasnsfer/src/main/java/cse215l/p2p/filetrasnsfer/FileServer.java): `core/FileTrasnsfer/src/main/java/cse215l/p2p/filetrasnsfer/FileServer.java`
- [Desktop file processing](https://github.com/rhythm113/cse215l/blob/main/core/FileTrasnsfer/src/main/java/cse215l/p2p/filetrasnsfer/FileServ.java): `core/FileTrasnsfer/src/main/java/cse215l/p2p/filetrasnsfer/FileServ.java`
- [Desktop utilities](https://github.com/rhythm113/cse215l/blob/main/core/FileTrasnsfer/src/main/java/cse215l/p2p/filetrasnsfer/Utils.java): `core/FileTrasnsfer/src/main/java/cse215l/p2p/filetrasnsfer/Utils.java`

### Other components

- **User**
- **Peer device**

## Connections

- User → Home screen: opens app (evidence: `core/File/app/src/main/java/com/cse215l/p2p/MainActivity.java`)
- Home screen → Send screen: opens sender (evidence: `core/File/app/src/main/java/com/cse215l/p2p/MainActivity.java`)
- Home screen → Receive screen: opens receiver (evidence: `core/File/app/src/main/java/com/cse215l/p2p/MainActivity.java`)
- User → Send screen: selects files (evidence: `core/File/app/src/main/java/com/cse215l/p2p/SenderActivity.java`)
- Send screen → File utilities: uses utilities (evidence: `core/File/app/src/main/java/com/cse215l/p2p/SenderActivity.java`)
- Receive screen → Socket server: starts server (evidence: `core/File/app/src/main/java/com/cse215l/p2p/RcvActivity.java`)
- Socket server → Split and rebuild: rebuilds parts (evidence: `core/File/app/src/main/java/com/cse215l/p2p/FileServer.java`)
- Socket server → File utilities: gets storage path (evidence: `core/File/app/src/main/java/com/cse215l/p2p/FileServer.java`)
- Socket client → Peer device: sends files (evidence: `core/File/app/src/main/java/com/cse215l/p2p/FileClient.java`)
- Socket server → Peer device: receives files (evidence: `core/File/app/src/main/java/com/cse215l/p2p/FileServer.java`)
- Desktop entry → Desktop sender UI: launches sender
- Desktop entry → Desktop receiver UI: launches receiver
- Desktop client → Desktop sender UI: logs status (evidence: `core/FileTrasnsfer/src/main/java/cse215l/p2p/filetrasnsfer/FileClient.java`)
- Desktop server → Desktop file processing: rebuilds parts (evidence: `core/FileTrasnsfer/src/main/java/cse215l/p2p/filetrasnsfer/FileServer.java`)
- Desktop server → Desktop receiver UI: logs status (evidence: `core/FileTrasnsfer/src/main/java/cse215l/p2p/filetrasnsfer/FileServer.java`)
- Desktop client → Peer device: sends files
- Desktop server → Peer device: receives files
