diff --git a/server/sendv2.c b/server/sendv2.c index f9f98b9..a3d691d 100644 --- a/server/sendv2.c +++ b/server/sendv2.c @@ -12,7 +12,7 @@ int main(int argc, char **argv) { const int port = 7332; - const char ip[512] = "192.168.0.43"; + const char ip[512] = "192.168.0.102"; struct sockaddr_in endpoint; struct dirent **namelist; char buff[512]; diff --git a/server/serverv2.c b/server/serverv2.c index f1da057..f7d5035 100644 --- a/server/serverv2.c +++ b/server/serverv2.c @@ -76,6 +76,7 @@ int main(int argc, char **argv) } free(namelist); +<<<<<<< HEAD if(s = send(sdconnection, names_files, 512, 0) == 512){ printf("eejo\n"); goto start; @@ -83,6 +84,11 @@ int main(int argc, char **argv) +======= + send(sdconnection, names_files, 512, 0); + printf("Done Sending"); + goto start; +>>>>>>> d2be62bb14d7513dfd23f9559a93e3de040781a0 } else if (strncmp("SEND", buff, 4) == 0) { diff --git a/src/main/java/ftp/sar/builder/FilePaneBuilder.java b/src/main/java/ftp/sar/builder/FilePaneBuilder.java index 5aaee4d..bdff798 100644 --- a/src/main/java/ftp/sar/builder/FilePaneBuilder.java +++ b/src/main/java/ftp/sar/builder/FilePaneBuilder.java @@ -7,7 +7,7 @@ import javafx.scene.text.Text; import javafx.scene.text.TextAlignment; public class FilePaneBuilder { - + public Pane getPane(String fileName) { Pane pane = new Pane(); pane.setPrefWidth(130); diff --git a/src/main/java/ftp/sar/controller/MainPageController.java b/src/main/java/ftp/sar/controller/MainPageController.java index 7bf0e6e..60afdfc 100644 --- a/src/main/java/ftp/sar/controller/MainPageController.java +++ b/src/main/java/ftp/sar/controller/MainPageController.java @@ -1,17 +1,16 @@ package ftp.sar.controller; import ftp.sar.ResourceLoader; +import ftp.sar.exception.CannotConnectException; import ftp.sar.server.Server; import ftp.sar.server.ServerFactory; import javafx.event.Event; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; -import javafx.scene.control.ScrollPane; import javafx.scene.control.TextField; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; -import java.awt.*; import java.io.IOException; public class MainPageController { @@ -26,19 +25,20 @@ public class MainPageController { public void tryAddServer(Event e) { ServerFactory serverFactory = new ServerFactory(); - Server server = serverFactory.create(ipField.getText(), 7332); + Server server = null; + try { + server = serverFactory.create(ipField.getText(), 7332); + } catch (CannotConnectException ex) { + ex.printStackTrace(); + } ResourceLoader resourceLoader = ResourceLoader.getInstance(); try { FXMLLoader fxmlLoader = new FXMLLoader(resourceLoader.getResource("server_panel.fxml")); Pane panel = fxmlLoader.load(); ServerPanelController serverPanelController = fxmlLoader.getController(); - serverPanelController.setData(server); + serverPanelController.setData(server, this); + server.setServerPanel(serverPanelController); this.serverContainer.getChildren().add(panel); - -// FXMLLoader fxmlLoader = new FXMLLoader(); -// Pane panel = fxmlLoader.load(loader.getResource("server_panel.fxml")); -// ServerPanelController serverPanelController = (ServerPanelController) fxmlLoader.getController(); -// serverPanelController.printHi(); } catch (IOException ex) { ex.printStackTrace(); } diff --git a/src/main/java/ftp/sar/controller/ServerPanelController.java b/src/main/java/ftp/sar/controller/ServerPanelController.java index 1f2776c..8da08e3 100644 --- a/src/main/java/ftp/sar/controller/ServerPanelController.java +++ b/src/main/java/ftp/sar/controller/ServerPanelController.java @@ -1,6 +1,7 @@ package ftp.sar.controller; import ftp.sar.builder.FilePaneBuilder; +import ftp.sar.exception.CannotConnectException; import ftp.sar.server.Server; import javafx.event.Event; import javafx.fxml.FXML; @@ -8,14 +9,19 @@ import javafx.fxml.Initializable; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.layout.FlowPane; +import javafx.scene.layout.Pane; import java.net.URL; +import java.util.ArrayList; import java.util.ResourceBundle; public class ServerPanelController implements Initializable { private Server server; private FilePaneBuilder filePaneBuilder = new FilePaneBuilder(); + private MainPageController mainPageController; + @FXML + Pane serverPane; @FXML Label serverPort; @FXML @@ -27,15 +33,22 @@ public class ServerPanelController implements Initializable { @FXML public void refreshList(Event e) { + try { + this.server.getConnector().readFileList(); + } catch (CannotConnectException ex) { + ex.printStackTrace(); + } + this.setFileList(); System.out.println("refresh"); } @FXML public void closeConnection(Event e) { - System.out.println("Close"); + this.mainPageController.serverContainer.getChildren().remove(this.serverPane); } - public void setData(Server server) { + public void setData(Server server, MainPageController mainPageController) { + this.mainPageController = mainPageController; this.server = server; this.serverPort.setText(Integer.toString(server.getPort())); this.serverIp.setText(server.getIp()); @@ -43,8 +56,9 @@ public class ServerPanelController implements Initializable { this.setFileList(); } - private void setFileList() { - for (String filename: this.server.getFileList()) { + public void setFileList() { + this.fileContainer.getChildren().clear(); + for (String filename : this.server.getFileList()) { var pane = this.filePaneBuilder.getPane(filename); this.fileContainer.getChildren().add(pane); diff --git a/src/main/java/ftp/sar/server/Server.java b/src/main/java/ftp/sar/server/Server.java index cdd1c8b..c5777a0 100644 --- a/src/main/java/ftp/sar/server/Server.java +++ b/src/main/java/ftp/sar/server/Server.java @@ -1,15 +1,48 @@ package ftp.sar.server; +import ftp.sar.controller.ServerPanelController; +import ftp.sar.exception.CannotConnectException; + +import java.io.IOException; +import java.net.Socket; import java.util.ArrayList; public class Server { private String ip; private int port; private ArrayList fileList = new ArrayList<>(); + private ServerPanelController serverPanelController; - public Server (String ip, int port) { + public ServerConnector getConnector() { + return connector; + } + + public void setConnector(ServerConnector connector) { + this.connector = connector; + } + + private ServerConnector connector = new ServerConnector(this); + + public Socket getSocket() { + return socket; + } + + public void setSocket(Socket socket) { + this.socket = socket; + } + + private Socket socket; + + public Server (String ip, int port) throws CannotConnectException { this.ip = ip; this.port = port; + + try { + this.socket = new Socket(ip, port); + this.connector.readFileList(); + } catch (IOException e) { + throw new CannotConnectException(); + } } public String getIp() { @@ -39,4 +72,8 @@ public class Server { public void addToFileList(String file) { this.fileList.add(file); } + + public void setServerPanel(ServerPanelController serverPanelController) { + this.serverPanelController = serverPanelController; + } } diff --git a/src/main/java/ftp/sar/server/ServerConnector.java b/src/main/java/ftp/sar/server/ServerConnector.java index 3de5de9..3af5811 100644 --- a/src/main/java/ftp/sar/server/ServerConnector.java +++ b/src/main/java/ftp/sar/server/ServerConnector.java @@ -4,35 +4,56 @@ import ftp.sar.PropertiesLoader; import ftp.sar.exception.CannotConnectException; import java.io.*; -import java.net.Socket; +import java.util.ArrayList; public class ServerConnector { + private final Server server; private PropertiesLoader propertiesLoader = PropertiesLoader.getInstance(); - public ServerConnector() { + ArrayList filterFileList = new ArrayList() { + { + add("."); + add(".."); + add("server"); + } + }; + + public ServerConnector(Server server) { + this.server = server; } - public boolean readFileList(Server server) throws CannotConnectException { - - this.sendRequest("GET_ALL_FILES", server); + public boolean readFileList() throws CannotConnectException { + this.server.setFileList(new ArrayList()); + this.sendRequest("GET_ALL_FILES"); try { - Socket socket = new Socket(server.getIp(), server.getPort()); - DataInputStream dataInputStream = new DataInputStream(socket.getInputStream()); + DataInputStream dataInputStream = new DataInputStream(this.server.getSocket().getInputStream()); InputStreamReader inputStreamReader = new InputStreamReader(dataInputStream); BufferedReader reader = new BufferedReader(inputStreamReader); - while (true) { - String file = reader.readLine(); - System.out.println(file); + char[] buffer = new char[512]; - if (file == null) { - break; + reader.read(buffer); + + String file = ""; + for (char c:buffer) { + switch (c) { + case '\n': + if (!this.filterFileList.contains(file)) { + server.addToFileList(file); + } + file = ""; + break; + case '\u0000': + break; + default: + file += c; } - server.addToFileList(file); } + this.sendRequest(""); + return true; } catch (Exception e) { e.printStackTrace(); @@ -42,20 +63,15 @@ public class ServerConnector { } private void sendRequest( - String request, - Server server - ) throws CannotConnectException { - Socket socket; + String message + ) throws CannotConnectException { try { - socket = new Socket(server.getIp(), server.getPort()); - DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream()); + DataOutputStream dataOutputStream = new DataOutputStream(this.server.getSocket().getOutputStream()); OutputStreamWriter outputStreamWriter = new OutputStreamWriter(dataOutputStream); BufferedWriter bufferedWriter = new BufferedWriter(outputStreamWriter); - bufferedWriter.write(request, 0, request.length()); + bufferedWriter.write(message, 0, message.length()); bufferedWriter.flush(); - bufferedWriter.close(); - socket.close(); } catch (IOException e) { throw new CannotConnectException(); } diff --git a/src/main/java/ftp/sar/server/ServerFactory.java b/src/main/java/ftp/sar/server/ServerFactory.java index 464ad69..5b623c6 100644 --- a/src/main/java/ftp/sar/server/ServerFactory.java +++ b/src/main/java/ftp/sar/server/ServerFactory.java @@ -3,26 +3,20 @@ package ftp.sar.server; import ftp.sar.exception.CannotConnectException; import ftp.sar.validator.IpValidator; +import java.io.IOException; +import java.net.Socket; + public class ServerFactory { - public Server create(String ip, int port) { + public Server create(String ip, int port) throws CannotConnectException { if (!this.validate(ip)) { return null; } - Server server = this.createServer(ip, port); - - ServerConnector connector = new ServerConnector(); - try { - connector.readFileList(server); - } catch (CannotConnectException e) { - e.printStackTrace(); - } - - return server; + return this.createServer(ip, port); } - private Server createServer(String ip, int port) { + private Server createServer(String ip, int port) throws CannotConnectException { return new Server(ip, port); } diff --git a/src/main/resources/server_panel.fxml b/src/main/resources/server_panel.fxml index 5a30067..912f09e 100644 --- a/src/main/resources/server_panel.fxml +++ b/src/main/resources/server_panel.fxml @@ -5,7 +5,7 @@ - +