Computer Science2023BC Travel Guide
Responsive destination storytelling
Computer Science
A client-server task management system
Project premise
A Java client-server application for managing shared team tasks through a JavaFX desktop client or a command-line interface, with TCP networking and JSON persistence.
Java
JavaFX + CLI
Client–server
TCP sockets / Port 5050
JSON / data/tasks.json
JUnit 5
01 / Overview
The application manages shared team tasks across a JavaFX desktop client and a command-line client for testing raw protocol commands. Both communicate with the same TCP server, so task state must remain predictable even when several users connect at the same time.
Clients send one-line text commands; the server parses each request, updates the shared task list and saves the result to a JSON file. The desktop table refreshes after every operation so the interface stays synchronized with server state.
02 / Capabilities
Tasks carry a title, assignee, status, priority and ISO-formatted due time. The application supports the full create, read, update and delete workflow while automatically moving unfinished tasks into an overdue state when their deadline passes.
03 / Architecture
The server listens on port 5050 and creates a dedicated ClientHandler thread for each accepted socket connection. Every handler parses one command and delegates it to a shared SchedulerService, which owns the task lifecycle independently of either interface.
A ConcurrentHashMap provides the shared task collection, with synchronized task mutations and serialized saves protecting critical updates. JSON persistence restores the workspace between sessions, while the service recalculates overdue states whenever tasks are listed or changed.
04 / Protocol
The custom protocol uses a command followed by key-value fields. Its parser accepts quoted values and escaped characters, allowing task titles and assignee names to contain spaces without making the wire format difficult to inspect or test.
05 / Interfaces
The JavaFX client separates add, update and delete actions into dedicated tabs and presents server data in a task table. Network requests run away from the UI thread, then use Platform.runLater to update the interface safely after the server responds.
A command-line client provides a second path into the same server. It keeps the protocol visible during development and makes client-server behaviour easier to inspect without the graphical interface.
06 / Quality
The project separates domain behaviour from presentation and transport concerns. JUnit 5 tests exercise protocol parsing and formatting as well as adding, listing, updating, deleting, persisting and automatically marking tasks overdue.
Tests use temporary JSON files, keeping service behaviour isolated from the application’s saved task data and making changes safer as the feature set grows.
07 / Run locally
Start SchedulerServer.java first, then run either SchedulerFxClient.java for the desktop interface or SchedulerClient.java for command-line access. Both clients connect to the server on localhost:5050.