From 04c76eb49fbc00e309f98368e2e3fc91b36e8a11 Mon Sep 17 00:00:00 2001 From: MKDrwal Date: Sun, 1 Dec 2019 19:20:42 +0100 Subject: [PATCH] Refactor connecting to server --- src/application/Main.java | 2 +- src/application/client/Connector.java | 72 ------------ src/application/client/server/Server.java | 43 +++++++ .../client/server/ServerConnector.java | 108 ++++++++++++++++++ .../client/server/ServerFactory.java | 31 +++++ .../client/validator/IpValidator.java | 16 +++ .../client/validator/Validator.java | 5 + .../view/mainPage/MainPageController.java | 33 ++---- src/resource/mainPage.fxml | 26 ----- src/resource/main_page.fxml | 20 ++++ 10 files changed, 231 insertions(+), 125 deletions(-) delete mode 100644 src/application/client/Connector.java create mode 100644 src/application/client/server/Server.java create mode 100644 src/application/client/server/ServerConnector.java create mode 100644 src/application/client/server/ServerFactory.java create mode 100644 src/application/client/validator/IpValidator.java create mode 100644 src/application/client/validator/Validator.java delete mode 100644 src/resource/mainPage.fxml create mode 100644 src/resource/main_page.fxml diff --git a/src/application/Main.java b/src/application/Main.java index 653a639..46a7c86 100644 --- a/src/application/Main.java +++ b/src/application/Main.java @@ -14,7 +14,7 @@ public class Main extends Application { public void start(Stage primaryStage) throws Exception{ ResourceLoader loader = ResourceLoader.getInstance(); - Parent root = FXMLLoader.load(loader.getResource("mainPage.fxml")); + Parent root = FXMLLoader.load(loader.getResource("main_page.fxml")); primaryStage.setTitle("FTP SAR"); primaryStage.setScene(new Scene(root)); primaryStage.show(); diff --git a/src/application/client/Connector.java b/src/application/client/Connector.java deleted file mode 100644 index 57f0dde..0000000 --- a/src/application/client/Connector.java +++ /dev/null @@ -1,72 +0,0 @@ -package application.client; - -import application.PropertiesLoader; -import application.client.exception.CannotConnectException; - -import java.io.*; -import java.net.Socket; - -public class Connector { - private static final Connector instance = new Connector(); - private PropertiesLoader propertiesLoader = PropertiesLoader.getInstance(); - - private Socket client = null; - private boolean isConnect = false; - - private Connector() { - } - - public static Connector getInstance() { - return instance; - } - - public void connect(String ip) throws CannotConnectException { - this.isConnect = false; - try { - this.client = new Socket(ip, Integer.parseInt(this.propertiesLoader.get("port"))); - this.checkIfConnect(); - } catch (IOException e) { - throw new CannotConnectException(); - } - } - - private void checkIfConnect() { - String pattern = this.propertiesLoader.get("serverStatusConnect"); - - this.isConnect = pattern.equals(this.getMessage()); - } - - public String getMessage() { - String message = null; - try { - System.out.println("Trying to get input stream"); - DataInputStream inputStream = new DataInputStream(this.client.getInputStream()); - InputStreamReader inputStreamReader = new InputStreamReader(inputStream); - BufferedReader br = new BufferedReader(inputStreamReader); - message = br.readLine(); - } catch (IOException e) { - e.printStackTrace(); - } - System.out.println("Message received: "+ message); - return message; - } - - public void getFileList() { - try { - DataOutputStream outputStream = new DataOutputStream(this.client.getOutputStream()); - OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream); - BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter); - - bufferedWriter.write("GET_ALL_FILES"); - bufferedWriter.flush(); - - this.getMessage(); - } catch (IOException e) { - e.printStackTrace(); - } - } - - public boolean isConnect() { - return this.isConnect; - } -} diff --git a/src/application/client/server/Server.java b/src/application/client/server/Server.java new file mode 100644 index 0000000..d2e8c20 --- /dev/null +++ b/src/application/client/server/Server.java @@ -0,0 +1,43 @@ +package application.client.server; + +import java.util.ArrayList; +import java.util.List; + +public class Server { + private String ip; + private int port; + private ArrayList fileList = new ArrayList(); + + public Server (String ip, int port) { + this.ip = ip; + this.port = port; + } + + public String getIp() { + return ip; + } + + public void setIp(String ip) { + this.ip = ip; + } + + public int getPort() { + return port; + } + + public void setPort(int port) { + this.port = port; + } + + public ArrayList getFileList() { + return fileList; + } + + public void setFileList(ArrayList fileList) { + this.fileList = fileList; + } + + public void addToFileList(String file) { + this.fileList.add(file); + } +} diff --git a/src/application/client/server/ServerConnector.java b/src/application/client/server/ServerConnector.java new file mode 100644 index 0000000..9835886 --- /dev/null +++ b/src/application/client/server/ServerConnector.java @@ -0,0 +1,108 @@ +package application.client.server; + +import application.PropertiesLoader; +import application.client.exception.CannotConnectException; + +import java.io.*; +import java.net.Socket; + +public class ServerConnector { + private PropertiesLoader propertiesLoader = PropertiesLoader.getInstance(); + + public ServerConnector() { + } + + public boolean readFileList(Server server) { + try { + Socket socket = new Socket(server.getIp(), server.getPort()); + DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream()); + OutputStreamWriter outputStreamWriter = new OutputStreamWriter(dataOutputStream); + BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter); + + String command = "GET_ALL_FILES"; + + bufferedWriter.write(command, 0, command.length()); + bufferedWriter.flush(); + bufferedWriter.close(); + socket.close(); + + + + socket = new Socket(server.getIp(), server.getPort()); + DataInputStream dataInputStream = new DataInputStream(socket.getInputStream()); + InputStreamReader inputStreamReader = new InputStreamReader(dataInputStream); + BufferedReader reader = new BufferedReader(inputStreamReader); + + while (true) { + String file = reader.readLine(); + System.out.println(file); + + if (file == null) { + break; + } + + server.addToFileList(file); + } + + return true; + } catch (Exception e) { + e.printStackTrace(); + } + + return false; + } + +// public static Connector getInstance() { +// return instance; +// } +// +// public void connect(String ip) throws CannotConnectException { +// this.isConnect = false; +// try { +// this.client = new Socket(ip, Integer.parseInt(this.propertiesLoader.get("port"))); +// this.checkIfConnect(); +// } catch (IOException e) { +// throw new CannotConnectException(); +// } +// } +// +// private void checkIfConnect() { +// String pattern = this.propertiesLoader.get("serverStatusConnect"); +// +// this.isConnect = pattern.equals(this.getMessage()); +// } +// +// public String getMessage() { +// String message = null; +// try { +// System.out.println("Trying to get input stream"); +// DataInputStream inputStream = new DataInputStream(this.client.getInputStream()); +// InputStreamReader inputStreamReader = new InputStreamReader(inputStream); +// BufferedReader br = new BufferedReader(inputStreamReader); +// message = br.readLine(); +// } catch (IOException e) { +// e.printStackTrace(); +// } +// System.out.println("Message received: "+ message); +// return message; +// } +// +// public void getFileList() { +// try { +// DataOutputStream outputStream = new DataOutputStream(this.client.getOutputStream()); +// OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream); +// BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter); +// +// bufferedWriter.write("GET_ALL_FILES"); +// bufferedWriter.flush(); +// +// this.getMessage(); +// } catch (IOException e) { +// e.printStackTrace(); +// } +// } +// +// public boolean isConnect() { +// return this.isConnect; +// } +} diff --git a/src/application/client/server/ServerFactory.java b/src/application/client/server/ServerFactory.java new file mode 100644 index 0000000..77094a0 --- /dev/null +++ b/src/application/client/server/ServerFactory.java @@ -0,0 +1,31 @@ +package application.client.server; + +import application.client.validator.IpValidator; + +import java.util.ArrayList; + +public class ServerFactory { + + public Server create(String ip, int port) { + if (!this.validate(ip)) { + return null; + }; + + Server server = this.createServer(ip, port); + + ServerConnector connector = new ServerConnector(); + connector.readFileList(server); + + return server; + } + + private Server createServer(String ip, int port) { + return new Server(ip, port); + } + + public boolean validate(String ip) { + IpValidator validator = new IpValidator(); + + return validator.validate(ip); + } +} diff --git a/src/application/client/validator/IpValidator.java b/src/application/client/validator/IpValidator.java new file mode 100644 index 0000000..4613645 --- /dev/null +++ b/src/application/client/validator/IpValidator.java @@ -0,0 +1,16 @@ +package application.client.validator; + +import java.security.InvalidParameterException; + +public class IpValidator implements Validator { + public static final String REGEX = "\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}"; + + @Override + public boolean validate(Object value) { + if (value instanceof String) { + return ((String) value).matches(REGEX); + } else { + throw new InvalidParameterException("Must be type string"); + } + } +} diff --git a/src/application/client/validator/Validator.java b/src/application/client/validator/Validator.java new file mode 100644 index 0000000..86646b5 --- /dev/null +++ b/src/application/client/validator/Validator.java @@ -0,0 +1,5 @@ +package application.client.validator; + +public interface Validator { + public boolean validate(Object value); +} diff --git a/src/application/client/view/mainPage/MainPageController.java b/src/application/client/view/mainPage/MainPageController.java index 6a7c76a..880dbf3 100644 --- a/src/application/client/view/mainPage/MainPageController.java +++ b/src/application/client/view/mainPage/MainPageController.java @@ -1,41 +1,22 @@ package application.client.view.mainPage; -import application.client.Connector; -import application.client.exception.CannotConnectException; +import application.client.server.ServerConnector; +import application.client.server.ServerFactory; import javafx.event.Event; import javafx.fxml.FXML; -import javafx.scene.control.Button; -import javafx.scene.control.Label; import javafx.scene.control.TextField; public class MainPageController { - public Button connectButton = null; - public Button getFileListButton = null; - public TextField rawFieldWithIp = null; - public Label messageLabel = null; - private Connector connector = Connector.getInstance(); + + @FXML public TextField ipField; public MainPageController() { - System.out.println("Controller work!"); } @FXML - public void connectToServer(Event e) { - this.connectButton.setText("Connecting..."); - System.out.println(rawFieldWithIp.getText());; + public void tryAddServer(Event e) { + ServerFactory serverFactory = new ServerFactory(); - try { - this.connector.connect(this.rawFieldWithIp.getText()); - } catch (CannotConnectException ex) { - } - - this.messageLabel.setText(this.connector.isConnect() ? "Connected" : "Not connect"); - this.connectButton.setText("Connect"); - this.getFileListButton.setDisable(false); - } - - @FXML - public void getFileList(Event e) { - this.connector.getFileList(); + serverFactory.create(ipField.getText(), 7332); } } diff --git a/src/resource/mainPage.fxml b/src/resource/mainPage.fxml deleted file mode 100644 index 38b0d94..0000000 --- a/src/resource/mainPage.fxml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - -