From 9ee32914652de9da46d377773afaf6e6abc69e6a Mon Sep 17 00:00:00 2001 From: Xeon0X Date: Sat, 5 Apr 2025 13:56:38 +0200 Subject: [PATCH] feat: better readme --- .settings/org.eclipse.buildship.core.prefs | 2 +- README.md | 94 ++++++++++++++++++---- 2 files changed, 79 insertions(+), 17 deletions(-) diff --git a/.settings/org.eclipse.buildship.core.prefs b/.settings/org.eclipse.buildship.core.prefs index d230334..bf38209 100644 --- a/.settings/org.eclipse.buildship.core.prefs +++ b/.settings/org.eclipse.buildship.core.prefs @@ -1,4 +1,4 @@ -arguments=--init-script /home/xeon0x/.var/app/dev.zed.Zed/data/zed/extensions/work/java/jdtls/jdt-language-server-1.46.0-202503271314/configuration/org.eclipse.osgi/58/0/.cp/gradle/init/init.gradle +arguments=--init-script /home/xeon0x/.var/app/dev.zed.Zed/data/zed/extensions/work/java/jdtls/jdt-language-server-1.46.1-202504011455/configuration/org.eclipse.osgi/58/0/.cp/gradle/init/init.gradle auto.sync=false build.scans.enabled=false connection.gradle.distribution=GRADLE_DISTRIBUTION(WRAPPER) diff --git a/README.md b/README.md index 2d82657..f7bb47a 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,24 @@ # ClientServer +A Java-based β˜•οΈβ†”οΈ UDP client-server chat πŸ’¬ system with automatic πŸ”„ text-to-emoji 😊 conversion using Mistral API. + +## Features + +### Available Commands + +- `/list` : Display connected clients list +- `/msg ` : Send private message to specific client +- `/help` : Display help with all available commands +- `/disconnect` : Clean server disconnection +- `` : Broadcast message translated to emojis to all connected clients + +### Technical Features + +- UDP Communication +- Multi-threading for client handling +- Mistral API for text-to-emoji conversion +- Disconnection handling + ## Build ```bash @@ -11,33 +30,76 @@ ### Client ```bash -./gradlew run --args='client' +./gradlew runClient ``` -or - -```bash -./gradlew runServer -``` +The client will ask for a pseudo, an IP (type `localhost` if server and clients are on the same machine), and a port (type `6666` by default). ### Server -```bash -./gradlew run --args='server' -``` - -or - ```bash ./gradlew runServer ``` +## Configuration + +Create a `config.properties` file at project root (`ClientServer/app/config.properties`) with: + +```properties +mistral.api.key=your_api_key +``` + +Replace `your_api_key` with your actual Mistral API key. Create one for free at https://console.mistral.ai/api-keys. If no API key is provided, the server will not be able to convert broadcasted messages to emojis and empty broadcasted messages will be sent. + ## Documentation +### Sequence Diagram + ```mermaid sequenceDiagram - Note over Client, Serveur: DatagramSocket("localhost", 66666) - Client->>+Serveur: DatagramPacket("Salve !", 7, "localhost", 6666) - Note over Serveur, Client: DatagramSocket("localhost", 66666) - Serveur->>+Client: DatagramPacket("AccusΓ© de rΓ©ception", 19, "localhost", 6666) + participant MainServer + + participant Alice + Note over Alice: Creates DatagramSocket + Alice->>+MainServer: Sends username "Alice" + Note over MainServer: Creates new socket
for AliceHandler + create participant AliceHandler + MainServer->>AliceHandler: Create new handler thread + MainServer->>-Alice: PORT:{AlicePort} + + participant Bob + Bob->>+MainServer: Sends username "Bob" + Note over MainServer: Creates new socket
for BobHandler + create participant BobHandler + MainServer->>BobHandler: Create new handler thread + MainServer->>-Bob: PORT:{BobPort} + + rect rgb(200, 200, 255) + Note over Alice,Bob: Chat loop + Alice->>+AliceHandler: "Hi everyone!" + Note over AliceHandler: Converts to emojis + AliceHandler->>+BobHandler: Broadcast message + BobHandler->>-Bob: "Alice: πŸ‘‹πŸ‘©β€πŸ‘©πŸŒπŸŽ‰" + AliceHandler->>-Alice: Message sent + + Bob->>+BobHandler: "Hello Alice, how are you?" + Note over BobHandler: Converts to emojis + BobHandler->>+AliceHandler: Broadcast message + AliceHandler->>-Alice: "Bob: πŸ‘‹πŸ»πŸ‘©πŸΌβ€πŸ¦°πŸ°πŸ€”πŸ‘©πŸΌβ€πŸ¦°πŸ‡πŸ’¬πŸ‘©πŸΌβ€πŸ¦°πŸ°πŸ‘πŸ»πŸ˜ŠπŸ‘©πŸΌβ€πŸ¦°πŸ‡πŸ‘‹πŸ»" + BobHandler->>-Bob: Message sent + end + + Alice->>+AliceHandler: /disconnect + Note over AliceHandler: Removes Alice
from map + AliceHandler->>-Alice: Disconnection confirmation + AliceHandler->>MainServer: Thread terminated + MainServer-->>AliceHandler: destroy + + Bob->>+BobHandler: /disconnect + Note over BobHandler: Removes Bob
from map + BobHandler->>-Bob: Disconnection confirmation + BobHandler->>MainServer: Thread terminated + MainServer-->>BobHandler: destroy + + Note over Alice,Bob: Close sockets ```