# phuocthai39/mydrive-sync architecture

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

## Overview

PBL4 Company Sync is a multi-agent shared-folder synchronization application: users sign in through a Swing client, manage workspaces and permissions, and sync local files through a TCP server. The server authenticates agents, coordinates file metadata, versions and replication, and persists administration and activity data in MySQL; file contents reside on agents. The graph reflects the documented capabilities and sampled call paths. Some server dispatch and UI wiring is unsampled, so uncertain connections are omitted.

Main entry points: [`src/main/java/vn/edu/pbl4sync/client/AgentService.java`](https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/client/AgentService.java) (Agent service), [`src/main/java/vn/edu/pbl4sync/server/ClientHandler.java`](https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/server/ClientHandler.java) (Client handler), [`src/main/java/vn/edu/pbl4sync/client/NetworkClient.java`](https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/client/NetworkClient.java) (Network client), [`src/main/java/vn/edu/pbl4sync/server/ServerCore.java`](https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/server/ServerCore.java) (Server core)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_client["Agent client"]
  node_login["Login UI<br/>[LoginFrame.java]"]
  node_workspace_ui["Workspace UI"]
  node_admin_ui["Admin UI"]
  node_agent["Agent service<br/>[AgentService.java]"]
  node_watcher["Folder watcher<br/>[FolderWatcher.java]"]
  node_network["Network client<br/>[NetworkClient.java]"]
end

subgraph group_server["Sync server"]
  node_handler["Client handler<br/>[ClientHandler.java]"]
  node_core["Server core<br/>[ServerCore.java]"]
  node_sessions["Agent sessions"]
end

subgraph group_protocol["Wire protocol"]
  node_protocol_io["Packet transport<br/>[ProtocolIO.java]"]
  node_packet["Message model<br/>[Packet.java]"]
end

subgraph group_persistence["State and files"]
  node_local_state[("Local sync state")]
  node_local_files["Shared folders<br/>[AgentService.java]"]
  node_db["Database access<br/>[Database.java]"]
  node_schema["Database schema<br/>[schema.sql]"]
end

node_user(("User"))
node_tcp["TCP socket"]
node_mysql[("MySQL")]

node_user -->|"signs in"| node_login
node_user -->|"manages workspaces"| node_workspace_ui
node_login -->|"starts session"| node_agent
node_workspace_ui -->|"requests workspace actions"| node_agent
node_admin_ui -->|"requests administration"| node_agent
node_agent -->|"sends requests"| node_network
node_agent -->|"starts watchers"| node_watcher
node_watcher -->|"reports file events"| node_agent
node_agent -->|"reads and writes versions"| node_local_state
node_agent -->|"reads and writes files"| node_local_files
node_network -->|"encodes and receives"| node_protocol_io
node_handler -->|"receives and sends"| node_protocol_io
node_protocol_io -->|"encodes packets"| node_packet
node_network -->|"uses socket"| node_tcp
node_handler -->|"serves connection"| node_tcp
node_tcp -->|"transfers packets"| node_network
node_tcp -->|"delivers packets"| node_handler
node_handler -->|"dispatches requests"| node_core
node_core -->|"queries and updates"| node_db
node_core -->|"tracks agents"| node_sessions
node_db -->|"reads and writes"| node_mysql
node_db -->|"initializes tables"| node_schema

click node_login "https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/client/ui/LoginFrame.java"
click node_workspace_ui "https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/client/ui/WorkspacePanel.java"
click node_admin_ui "https://github.com/phuocthai39/mydrive-sync/tree/main/src/main/java/vn/edu/pbl4sync/client/ui"
click node_agent "https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/client/AgentService.java"
click node_watcher "https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/client/sync/FolderWatcher.java"
click node_local_state "https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/client/sync/LocalStateStore.java"
click node_local_files "https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/client/AgentService.java"
click node_network "https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/client/NetworkClient.java"
click node_protocol_io "https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/common/ProtocolIO.java"
click node_packet "https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/common/Packet.java"
click node_handler "https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/server/ClientHandler.java"
click node_core "https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/server/ServerCore.java"
click node_sessions "https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/server/ConnectionManager.java"
click node_db "https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/server/db/Database.java"
click node_schema "https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/resources/schema.sql"

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_login,node_workspace_ui,node_admin_ui,node_agent,node_watcher,node_network,node_user toneBlue
class node_handler,node_core,node_sessions,node_mysql toneAmber
class node_protocol_io,node_packet toneMint
class node_local_state,node_local_files,node_db,node_schema toneRose
class node_tcp toneIndigo
```

## Components

### Agent client

- [Login UI](https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/client/ui/LoginFrame.java): `src/main/java/vn/edu/pbl4sync/client/ui/LoginFrame.java`
- [Workspace UI](https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/client/ui/WorkspacePanel.java): `src/main/java/vn/edu/pbl4sync/client/ui/WorkspacePanel.java`
- [Admin UI](https://github.com/phuocthai39/mydrive-sync/tree/main/src/main/java/vn/edu/pbl4sync/client/ui): `src/main/java/vn/edu/pbl4sync/client/ui`
- [Agent service](https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/client/AgentService.java): `src/main/java/vn/edu/pbl4sync/client/AgentService.java`
- [Folder watcher](https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/client/sync/FolderWatcher.java): `src/main/java/vn/edu/pbl4sync/client/sync/FolderWatcher.java`
- [Network client](https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/client/NetworkClient.java): `src/main/java/vn/edu/pbl4sync/client/NetworkClient.java`

### Sync server

- [Client handler](https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/server/ClientHandler.java): `src/main/java/vn/edu/pbl4sync/server/ClientHandler.java`
- [Server core](https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/server/ServerCore.java): `src/main/java/vn/edu/pbl4sync/server/ServerCore.java`
- [Agent sessions](https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/server/ConnectionManager.java): `src/main/java/vn/edu/pbl4sync/server/ConnectionManager.java`

### Wire protocol

- [Packet transport](https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/common/ProtocolIO.java): `src/main/java/vn/edu/pbl4sync/common/ProtocolIO.java`
- [Message model](https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/common/Packet.java): `src/main/java/vn/edu/pbl4sync/common/Packet.java`

### State and files

- [Local sync state](https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/client/sync/LocalStateStore.java): `src/main/java/vn/edu/pbl4sync/client/sync/LocalStateStore.java`
- [Shared folders](https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/client/AgentService.java): `src/main/java/vn/edu/pbl4sync/client/AgentService.java`
- [Database access](https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/java/vn/edu/pbl4sync/server/db/Database.java): `src/main/java/vn/edu/pbl4sync/server/db/Database.java`
- [Database schema](https://github.com/phuocthai39/mydrive-sync/blob/main/src/main/resources/schema.sql): `src/main/resources/schema.sql`

### Other components

- **User**
- **TCP socket**
- **MySQL**

## Connections

- User → Login UI: signs in
- User → Workspace UI: manages workspaces
- Login UI → Agent service: starts session
- Workspace UI → Agent service: requests workspace actions
- Admin UI → Agent service: requests administration
- Agent service → Network client: sends requests
- Agent service → Folder watcher: starts watchers
- Folder watcher → Agent service: reports file events
- Agent service → Local sync state: reads and writes versions
- Agent service → Shared folders: reads and writes files
- Network client → Packet transport: encodes and receives
- Client handler → Packet transport: receives and sends
- Packet transport → Message model: encodes packets
- Network client → TCP socket: uses socket
- Client handler → TCP socket: serves connection
- TCP socket → Network client: transfers packets
- TCP socket → Client handler: delivers packets
- Client handler → Server core: dispatches requests
- Server core → Database access: queries and updates
- Server core → Agent sessions: tracks agents
- Database access → MySQL: reads and writes
- Database access → Database schema: initializes tables
