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