diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Communication/Client.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Communication/Client.java index b5a7bba5bbd19ada0ebf6fefaaaf33f2c3a8b492..b05b700bfa6354463857b213bd26ad77b9749bd1 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 c85118a766fd10c9bed4de0e70e2f2f99e387ad1..32c776cb91e787e81d33f34dc5e06c6fe01ff3e5 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 0000000000000000000000000000000000000000..8379a87b60a6b39c27ae7d608cec1cdb3949c3e0 --- /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 0000000000000000000000000000000000000000..8615f415376d09c38d244fd0d47c6b020a5fe848 --- /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 0000000000000000000000000000000000000000..e4456aae02ee651e2198baedb375eb7c1971c196 --- /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 ef7f9d8b1abf4d4187f5b1b6e4c0ff9c53bbd139..53554153ed9148388ba6d69b4df3fe53159bd34f 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 59ddc12cfbad4b698a080f3a44f1432c1d3f4e2e..709b20aded5250f06778d8b0a14af1555a1997ec 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)