No description
| client | ||
| server | ||
| web-client | ||
| build_client.sh | ||
| docker-compose.yml | ||
| README.md | ||
TicTacToe Project
This project contains a TCP Game Server, a Java Swing Client, and a Spring Boot Web Client.
Structure
server/: Java TCP Server (Port 1870). Includes Anticheat logic (validates turns, moves, wins).client/: Standalone Java Swing Client. Defaults todokploy.lona-development.org:1870but allows custom host/port.web-client/: Spring Boot Web Application. Acts as a proxy to the TCP Server via WebSocket.
Running with Docker Compose
To start the Server and Web Client:
docker-compose up --build
- Server runs on port
1870(exposed). - Web Client runs on
http://localhost:8080.
Building and Running the Standalone Java Client
Go to the client directory and run the build script:
cd client
chmod +x build.sh
./build.sh
Usage
By default, the client attempts to connect to dokploy.lona-development.org:1870.
java -jar target/client-1.0-SNAPSHOT.jar
Custom Host/Port (Local Testing): If you want to connect to a local server (e.g., running via Docker Compose), pass the host and port as arguments:
java -jar target/client-1.0-SNAPSHOT.jar localhost 1870
Game Protocol (TCP 1870)
The server creates game sessions identified by a unique 6-character code.
- CREATE: Starts a new game. Server returns
GAME_CREATED <CODE>. - JOIN <CODE>: Joins an existing game. Server returns
JOIN_SUCCESSorERROR. - MOVE <ROW> <COL>: Places your symbol (0-2). Validated by server.
- SURRENDER: Forfeits the game immediately.
- LEAVE: Leaves the current lobby. If empty, the lobby acts as closed.
- RESTART: Resets the board for the current lobby so players can play again.
Server Messages:
WIN <SYMBOL>orDRAWOPPONENT_LEFT: Sent when the other player leaves via the LEAVE command.RESTART: Sent when the game is restarted.
Troubleshooting
- Server Connection Refused? Ensure the server container is running and port 1870 is mapped.
- Client stuck connecting? Verify the hostname is reachable. Use
localhostif running locally.