From eda51f8ac5583f7560697a8c981382cbe1ca62c8 Mon Sep 17 00:00:00 2001 From: Mathis Ginkel Date: Thu, 2 Apr 2026 11:16:40 +0200 Subject: [PATCH] Add: CoreClient and ChatClient --- .../casono/client/chat/ChatController.java | 14 +++-- .../casono/client/network/ChatClient.java | 45 ++++++++++++++++ .../casono/client/network/ClientService.java | 51 +------------------ .../casono/client/network/CoreClient.java | 17 +++++++ 4 files changed, 73 insertions(+), 54 deletions(-) create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/network/ChatClient.java create mode 100644 src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/network/CoreClient.java diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/chat/ChatController.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/chat/ChatController.java index 9a04d44..71ae97b 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/chat/ChatController.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/chat/ChatController.java @@ -1,5 +1,6 @@ package ch.unibas.dmi.dbis.cs108.casono.client.chat; +import ch.unibas.dmi.dbis.cs108.casono.client.network.ChatClient; import ch.unibas.dmi.dbis.cs108.casono.client.network.ClientService; import java.util.ArrayList; import java.util.List; @@ -14,12 +15,14 @@ public class ChatController { private final ClientService clientService; private final ArrayList chatModelArrayList; + private final ChatClient chatClient; public ChatController(String username, ClientService clientService) { this.username = username; this.clientService = clientService; chatModelArrayList = new ArrayList<>(); chatModelArrayList.add(new ChatModel(ChatType.GLOBAL, username)); + chatClient = new ChatClient(clientService); } public void createLobbyChat(int lobbyId, ChatType chatType) { @@ -29,7 +32,7 @@ public class ChatController { /** method to get all messages from the server */ public Boolean receiveMessage() { - List newMessages = clientService.getMessages(); + List newMessages = chatClient.getMessages(); if (!newMessages.isEmpty()) { for (Message msg : newMessages) { switch (msg.getMessageType()) { @@ -51,8 +54,11 @@ public class ChatController { } } - /** method to send a message to the server */ - public void sendMessageToNetwork(Message message) { - clientService.sendMessage(message); + /** + * method to send a message to the server + * @param message + */ + public void onSendToNetwork(Message message) { + chatClient.sendMessage(message); } } diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/network/ChatClient.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/network/ChatClient.java new file mode 100644 index 0000000..b9f30c4 --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/network/ChatClient.java @@ -0,0 +1,45 @@ +package ch.unibas.dmi.dbis.cs108.casono.client.network; + +import ch.unibas.dmi.dbis.cs108.casono.client.chat.Message; + +import java.util.ArrayList; +import java.util.List; + +public class ChatClient { + + private ClientService clientService; + + public ChatClient(ClientService clientService) { + this.clientService = clientService; + } + + /** + * sends a message to the server + * @param message + */ + + public void sendMessage(Message message) { + String request = "SEND_MESSAGE " + message.toArgsString(); + clientService.processCommand(request); + } + + /** + * Send a Request to get the number of Messages currently in the Queue for the client. + * Then proceeds, if needed, to get the messages by sending + */ + + public List getMessages() { + String countStr = clientService.processCommand("GET_MESSAGE_COUNT"); + int count = Integer.parseInt(countStr); + System.out.println("Got " + count + " messages"); + List messages = new ArrayList<>(); + for (int i = 0; i < count; i++) { + String message = clientService.processCommand("GET_NEXT_MESSAGE"); + if (message != null) { + Message message1 = Message.toMessage(message); + messages.add(message1); + } + } + return messages; + } +} diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/network/ClientService.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/network/ClientService.java index aaf1332..df64b61 100644 --- a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/network/ClientService.java +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/network/ClientService.java @@ -8,7 +8,6 @@ import org.apache.logging.log4j.Logger; import java.io.IOException; import java.net.Socket; import java.util.ArrayList; -import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -56,54 +55,6 @@ public class ClientService { } - /** - * Sends a ping to the server Returns nothing, the method processMessage() already handles the - * cases "+OK" or "-ERROR" - */ - public void ping() { - processMessage("PING"); - } - - /** - * Sends a login request to the server to create a new user on the server - * - * @param username - * @return - a new username, if the same username is already used by someone else - */ - public String login(String username) { - String msg = "LOGIN USERNAME=" + username; - return processMessage(msg); - } - - /** - * Send a Request to get the number of Messages currently in the Queue for the client. Then - * proceeds, if needed, to get the messages by sending - */ - public List getMessages() { - String countStr = processMessage("GET_MESSAGE_COUNT"); - int count = Integer.parseInt(countStr); - logger.info("Got " + count + " messages"); - List messages = new ArrayList<>(); - for (int i = 0; i < count; i++) { - String message = processMessage("GET_NEXT_MESSAGE"); - if (message != null) { - Message message1 = Message.toMessage(message); - messages.add(message1); - } - } - return messages; - } - - /** - * Sends a Request to the Server containing all relevant information of the message the client - * wrote. - * - * @param message - */ - public void sendMessage(Message message) { - String request = "SEND_MESSAGE " + message.toArgsString(); - processMessage(request); - } /** * Sends the Requests to the server and waits for the response If the response is "+OK" it @@ -112,7 +63,7 @@ public class ClientService { * @param message * @return - The response as a string, if it has to be returned (+OK will not be returned) */ - private String processMessage(String message) { + protected String processCommand(String message) { AtomicReference response = new AtomicReference<>(); sendRequest( () -> { diff --git a/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/network/CoreClient.java b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/network/CoreClient.java new file mode 100644 index 0000000..92902bc --- /dev/null +++ b/src/main/java/ch/unibas/dmi/dbis/cs108/casono/client/network/CoreClient.java @@ -0,0 +1,17 @@ +package ch.unibas.dmi.dbis.cs108.casono.client.network; + +public class CoreClient { + private final ClientService clientService; + + public CoreClient(ClientService clientservice) { + this.clientService = clientservice; + } + + public void ping() { + clientService.processCommand("PING"); + } + + public void login(String user) { + clientService.processCommand("LOGIN USERNAME=" + user); + } +} \ No newline at end of file