From 5e471a073cebf83a9ea4d6c4f450f8a654095f70 Mon Sep 17 00:00:00 2001 From: Leonard <Leonard@Leonard.Leo> Date: Sun, 14 Jun 2020 19:32:35 +0300 Subject: [PATCH] client done --- .../Communication/Client.java | 84 ++++++++++++++----- .../Server/ClientHandler.java | 25 +++++- .../Server/RequestObject.java | 19 +++++ .../Server/RequestType.java | 5 ++ .../Server/ResponseObject.java | 4 + .../galaxytruckerreloaded/Server/Server.java | 1 - .../Server/ServerServiceCommunicator.java | 1 - 7 files changed, 113 insertions(+), 26 deletions(-) create mode 100644 core/src/com/galaxytrucker/galaxytruckerreloaded/Server/RequestObject.java create mode 100644 core/src/com/galaxytrucker/galaxytruckerreloaded/Server/RequestType.java create mode 100644 core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ResponseObject.java diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Communication/Client.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Communication/Client.java index b5a7bba5..b05b700b 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Communication/Client.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Communication/Client.java @@ -1,40 +1,78 @@ package com.galaxytrucker.galaxytruckerreloaded.Communication; +import com.galaxytrucker.galaxytruckerreloaded.Server.RequestObject; +import com.galaxytrucker.galaxytruckerreloaded.Server.ResponseObject; import lombok.NonNull; +import java.io.*; import java.net.Socket; public class Client { - /** Client socket for network communication */ + /** + * Client socket for network communication + */ private Socket socket; - /** ClientControllerCommunicator for logic handling */ - private ClientControllerCommunicator clientControllerCommunicator; - - /** - * - Request and Response from and to the server. - * */ - public String sendAndReceive(){ - // View clicks something - // Controller issues a request - // Client ships request to server - // receive response - // give response to controller - // update views - // return server response as string - return null; - } + /** + * Used to send data + */ + private PrintWriter send; - /** Constructor - * Loop for receiving Data - * */ - public Client(@NonNull String ipAddress, @NonNull int port) throws IllegalArgumentException{ - clientControllerCommunicator = new ClientControllerCommunicator(); + /** + * Used to receive data + */ + private BufferedReader receive; + + /** + * ObjectOutputStream for sending objects + */ + private ObjectOutputStream sendObject; + + /** + * ObjectInputStream for receiving objects + */ + private ObjectInputStream receiveObject; + + /** + * Send a request to the server + * @return the server's response + */ + public ResponseObject sendAndReceive(RequestObject requestObject) throws IllegalArgumentException { try { - this.socket = new Socket(ipAddress,port); + sendObject.writeObject(requestObject); + return (ResponseObject) receiveObject.readObject(); } catch (Exception e){ + e.printStackTrace(); + throw new IllegalArgumentException(e.getMessage()); + } + } + + /** + * Login + */ + public boolean login(String username) throws IllegalArgumentException { + try { + send.println("[LOGIN]:" + username); + return receive.readLine().equals("[ACCEPTED]"); + } catch (Exception e) { + e.printStackTrace(); + throw new IllegalArgumentException(e.getMessage()); + } + } + + /** + * Constructor + */ + public Client(@NonNull String ipAddress, @NonNull int port) throws IllegalArgumentException { + try { + socket = new Socket(ipAddress, port); + send = new PrintWriter(socket.getOutputStream(), true); + receive = new BufferedReader(new InputStreamReader(socket.getInputStream())); + sendObject = new ObjectOutputStream(socket.getOutputStream()); + receiveObject = new ObjectInputStream(socket.getInputStream()); + } catch (Exception e) { e.printStackTrace(); throw new IllegalArgumentException("Couldn't initialize connection to server"); } diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ClientHandler.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ClientHandler.java index c85118a7..32c776cb 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ClientHandler.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ClientHandler.java @@ -1,5 +1,6 @@ package com.galaxytrucker.galaxytruckerreloaded.Server; +import java.io.*; import java.net.Socket; public class ClientHandler implements Runnable { @@ -13,12 +14,34 @@ public class ClientHandler implements Runnable { /** ServerServiceCommunicator */ private ServerServiceCommunicator serverServiceCommunicator; + /** Used to send data */ + private PrintWriter send; + + /** Used to receive data */ + private BufferedReader receive; + + /** ObjectOutputStream for sending objects */ + private ObjectOutputStream sendObject; + + /** ObjectInputStream for receiving objects */ + private ObjectInputStream receiveObject; + /** Constructor * @param clientSocket - the client's socket * @param server - the server */ - public ClientHandler(Socket clientSocket,Server server){ + public ClientHandler(Socket clientSocket,Server server) throws IllegalArgumentException { this.clientSocket = clientSocket; this.server = server; + try { + sendObject = new ObjectOutputStream(clientSocket.getOutputStream()); + receiveObject = new ObjectInputStream(clientSocket.getInputStream()); + send = new PrintWriter(clientSocket.getOutputStream(),true); + receive = new BufferedReader(new InputStreamReader(clientSocket.getInputStream())); + } + catch (Exception e){ + e.printStackTrace(); + throw new IllegalArgumentException(); + } } /** Run */ diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/RequestObject.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/RequestObject.java new file mode 100644 index 00000000..8379a87b --- /dev/null +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/RequestObject.java @@ -0,0 +1,19 @@ +package com.galaxytrucker.galaxytruckerreloaded.Server; + +import com.galaxytrucker.galaxytruckerreloaded.Model.Ship; +import lombok.Getter; +import lombok.Setter; + +@Getter +@Setter +public class RequestObject { + + /** Type of Request */ + private RequestType requestType; + + /** Username */ + private String username; + + /** Ship */ + private Ship ship; +} diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/RequestType.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/RequestType.java new file mode 100644 index 00000000..8615f415 --- /dev/null +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/RequestType.java @@ -0,0 +1,5 @@ +package com.galaxytrucker.galaxytruckerreloaded.Server; + +public enum RequestType { + LOGIN +} diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ResponseObject.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ResponseObject.java new file mode 100644 index 00000000..e4456aae --- /dev/null +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ResponseObject.java @@ -0,0 +1,4 @@ +package com.galaxytrucker.galaxytruckerreloaded.Server; + +public class ResponseObject { +} diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Server.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Server.java index ef7f9d8b..53554153 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Server.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Server.java @@ -2,7 +2,6 @@ package com.galaxytrucker.galaxytruckerreloaded.Server; import com.galaxytrucker.galaxytruckerreloaded.Communication.Client; -import lombok.NonNull; import java.net.ServerSocket; import java.net.Socket; diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ServerServiceCommunicator.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ServerServiceCommunicator.java index 59ddc12c..709b20ad 100644 --- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ServerServiceCommunicator.java +++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ServerServiceCommunicator.java @@ -2,7 +2,6 @@ package com.galaxytrucker.galaxytruckerreloaded.Server; import com.galaxytrucker.galaxytruckerreloaded.Model.Ship; import lombok.AccessLevel; -import lombok.NonNull; import lombok.RequiredArgsConstructor; @RequiredArgsConstructor(access = AccessLevel.PUBLIC) -- GitLab