# davincecode/lomsx architecture

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

- Interactive diagram: https://gitdiagram.com/davincecode/lomsx
- Repository: https://github.com/davincecode/lomsx

## Overview

OnLime is a JavaFX LAN messaging application with user accounts, message views, and a TCP server that relays client traffic. The principal workflow is login/account creation, opening the client dashboard, exchanging messages through the server, and persisting account and message data in MySQL. The dashboard also loads and manages friend/direct-message lists; the README documents backup/restore, implemented within the database layer. The excerpts show centralized socket relay rather than a separate peer-to-peer path. Some README capabilities, including deferred delivery and advanced group/broadcast features, are described as future work; unsampled wiring is not inferred.

Main entry points: [`src/main/java/database/OnLimeDB.java`](https://github.com/davincecode/lomsx/blob/master/src/main/java/database/OnLimeDB.java) (Accounts and messages), [`src/main/java/controller/ClientFormController.java`](https://github.com/davincecode/lomsx/blob/master/src/main/java/controller/ClientFormController.java) (Messaging dashboard), [`src/main/java/server/Server.java`](https://github.com/davincecode/lomsx/blob/master/src/main/java/server/Server.java) (Socket server), [`src/main/java/controller/LoginFormController.java`](https://github.com/davincecode/lomsx/blob/master/src/main/java/controller/LoginFormController.java) (Login and signup)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_account["Accounts and Login"]
  node_entry["Application entry<br/>[Launcher.java]"]
  node_serverlaunch["Server launcher"]
  node_clientlaunch["Client launcher"]
  node_login["Login and signup"]
  node_encrypt["Password hashing<br/>[Encryptor.java]"]
end

subgraph group_client["Client Messaging"]
  node_dashboard["Messaging dashboard"]
  node_userlist["User list actions<br/>[UserListCell.java]"]
end

subgraph group_network["Server and Presence"]
  node_serverui["Server console"]
  node_server["Socket server<br/>[Server.java]"]
  node_handler["Client socket handler<br/>[ClientHandler.java]"]
  node_presence["Online user status<br/>[Server.java]"]
end

subgraph group_storage["Persistence"]
  node_message["Message record<br/>[Message.java]"]
  node_db["Accounts and messages<br/>[OnLimeDB.java]"]
  node_backup["Backup and restore<br/>[OnLimeDB.java]"]
end

node_user(("Office user"))
node_mysql[("MySQL database")]

node_user -->|"starts"| node_entry
node_entry -->|"launches"| node_serverlaunch
node_user -->|"opens client"| node_clientlaunch
node_clientlaunch -->|"opens login"| node_login
node_user -->|"authenticates"| node_login
node_login -->|"checks accounts"| node_db
node_login -->|"hashes password"| node_encrypt
node_login -->|"opens dashboard"| node_dashboard
node_dashboard -->|"loads and stores"| node_db
node_dashboard -->|"uses records"| node_message
node_dashboard -->|"configures list"| node_userlist
node_userlist -->|"manages user lists"| node_db
node_dashboard -->|"observes status"| node_server
node_dashboard -->|"reports activity"| node_serverui
node_serverlaunch -.->|"opens console"| node_serverui
node_serverui -->|"starts listener"| node_server
node_server -->|"creates handler"| node_handler
node_handler -->|"updates presence"| node_server
node_server -->|"loads usernames"| node_db
node_server -->|"tracks users"| node_presence
node_handler -->|"relays messages"| node_handler
node_db -->|"creates records"| node_message
node_db -->|"queries and writes"| node_mysql
node_db -->|"provides backups"| node_backup

click node_entry "https://github.com/davincecode/lomsx/blob/master/src/main/java/Launcher.java"
click node_serverlaunch "https://github.com/davincecode/lomsx/blob/master/src/main/java/server/ServerLauncher.java"
click node_clientlaunch "https://github.com/davincecode/lomsx/blob/master/src/main/java/client/ClientLauncher.java"
click node_login "https://github.com/davincecode/lomsx/blob/master/src/main/java/controller/LoginFormController.java"
click node_encrypt "https://github.com/davincecode/lomsx/blob/master/src/main/java/controller/Encryptor.java"
click node_dashboard "https://github.com/davincecode/lomsx/blob/master/src/main/java/controller/ClientFormController.java"
click node_userlist "https://github.com/davincecode/lomsx/blob/master/src/main/java/utils/UserListCell.java"
click node_message "https://github.com/davincecode/lomsx/blob/master/src/main/java/database/Message.java"
click node_db "https://github.com/davincecode/lomsx/blob/master/src/main/java/database/OnLimeDB.java"
click node_backup "https://github.com/davincecode/lomsx/blob/master/src/main/java/database/OnLimeDB.java"
click node_serverui "https://github.com/davincecode/lomsx/blob/master/src/main/java/controller/ServerFormController.java"
click node_server "https://github.com/davincecode/lomsx/blob/master/src/main/java/server/Server.java"
click node_handler "https://github.com/davincecode/lomsx/blob/master/src/main/java/client/ClientHandler.java"
click node_presence "https://github.com/davincecode/lomsx/blob/master/src/main/java/server/Server.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_entry,node_serverlaunch,node_clientlaunch,node_login,node_encrypt,node_user toneBlue
class node_dashboard,node_userlist,node_mysql toneAmber
class node_serverui,node_server,node_handler,node_presence toneMint
class node_message,node_db,node_backup toneRose
```

## Components

### Accounts and Login

- [Application entry](https://github.com/davincecode/lomsx/blob/master/src/main/java/Launcher.java): `src/main/java/Launcher.java`
- [Server launcher](https://github.com/davincecode/lomsx/blob/master/src/main/java/server/ServerLauncher.java): `src/main/java/server/ServerLauncher.java`
- [Client launcher](https://github.com/davincecode/lomsx/blob/master/src/main/java/client/ClientLauncher.java): `src/main/java/client/ClientLauncher.java`
- [Login and signup](https://github.com/davincecode/lomsx/blob/master/src/main/java/controller/LoginFormController.java): `src/main/java/controller/LoginFormController.java`
- [Password hashing](https://github.com/davincecode/lomsx/blob/master/src/main/java/controller/Encryptor.java): `src/main/java/controller/Encryptor.java`

### Client Messaging

- [Messaging dashboard](https://github.com/davincecode/lomsx/blob/master/src/main/java/controller/ClientFormController.java): `src/main/java/controller/ClientFormController.java`
- [User list actions](https://github.com/davincecode/lomsx/blob/master/src/main/java/utils/UserListCell.java): `src/main/java/utils/UserListCell.java`

### Server and Presence

- [Server console](https://github.com/davincecode/lomsx/blob/master/src/main/java/controller/ServerFormController.java): `src/main/java/controller/ServerFormController.java`
- [Socket server](https://github.com/davincecode/lomsx/blob/master/src/main/java/server/Server.java): `src/main/java/server/Server.java`
- [Client socket handler](https://github.com/davincecode/lomsx/blob/master/src/main/java/client/ClientHandler.java): `src/main/java/client/ClientHandler.java`
- [Online user status](https://github.com/davincecode/lomsx/blob/master/src/main/java/server/Server.java): `src/main/java/server/Server.java`

### Persistence

- [Message record](https://github.com/davincecode/lomsx/blob/master/src/main/java/database/Message.java): `src/main/java/database/Message.java`
- [Accounts and messages](https://github.com/davincecode/lomsx/blob/master/src/main/java/database/OnLimeDB.java): `src/main/java/database/OnLimeDB.java`
- [Backup and restore](https://github.com/davincecode/lomsx/blob/master/src/main/java/database/OnLimeDB.java): `src/main/java/database/OnLimeDB.java`

### Other components

- **Office user**
- **MySQL database**

## Connections

- Office user → Application entry: starts (evidence: `src/main/java/Launcher.java`)
- Application entry → Server launcher: launches (evidence: `src/main/java/Launcher.java`)
- Office user → Client launcher: opens client (evidence: `src/main/java/client/ClientLauncher.java`)
- Client launcher → Login and signup: opens login (evidence: `src/main/java/client/ClientLauncher.java`)
- Office user → Login and signup: authenticates (evidence: `src/main/java/controller/LoginFormController.java`)
- Login and signup → Accounts and messages: checks accounts (evidence: `src/main/java/controller/LoginFormController.java`)
- Login and signup → Password hashing: hashes password (evidence: `src/main/java/controller/LoginFormController.java`)
- Login and signup → Messaging dashboard: opens dashboard (evidence: `src/main/java/controller/LoginFormController.java`)
- Messaging dashboard → Accounts and messages: loads and stores (evidence: `src/main/java/controller/ClientFormController.java`)
- Messaging dashboard → Message record: uses records (evidence: `src/main/java/controller/ClientFormController.java`)
- Messaging dashboard → User list actions: configures list (evidence: `src/main/java/controller/ClientFormController.java`)
- User list actions → Accounts and messages: manages user lists (evidence: `src/main/java/utils/UserListCell.java`)
- Messaging dashboard → Socket server: observes status (evidence: `src/main/java/controller/ClientFormController.java`)
- Messaging dashboard → Server console: reports activity (evidence: `src/main/java/controller/ClientFormController.java`)
- Server launcher → Server console: opens console
- Server console → Socket server: starts listener (evidence: `src/main/java/controller/ServerFormController.java`)
- Socket server → Client socket handler: creates handler (evidence: `src/main/java/server/Server.java`)
- Client socket handler → Socket server: updates presence (evidence: `src/main/java/client/ClientHandler.java`)
- Socket server → Accounts and messages: loads usernames (evidence: `src/main/java/server/Server.java`)
- Socket server → Online user status: tracks users (evidence: `src/main/java/server/Server.java`)
- Client socket handler → Client socket handler: relays messages (evidence: `src/main/java/client/ClientHandler.java`)
- Accounts and messages → Message record: creates records (evidence: `src/main/java/database/OnLimeDB.java`)
- Accounts and messages → MySQL database: queries and writes (evidence: `src/main/java/database/OnLimeDB.java`)
- Accounts and messages → Backup and restore: provides backups (evidence: `src/main/java/database/OnLimeDB.java`)
