diff --git a/src/ftp/Controller.java b/src/ftp/Controller.java index 0316c1dceb5c81914ce0003dc8c38c650676aa9f..ce797fce420443bb7fa8448fc2957d287a886fc0 100644 --- a/src/ftp/Controller.java +++ b/src/ftp/Controller.java @@ -117,6 +117,20 @@ public class Controller extends Server { file.setStoreAcksQuota(r); send("STORE_TO " + ports, client); + + + Boolean fileStored = false; + while (!fileStored) { + if (file.ackCheck()) { + file.setStoreInProgress(false); + file.setStoreComplete(true); + fileStored = true; + + threadIDOutput("Store of file " + filename + " complete"); + + send("STORE_COMPLETE", client); + } + } } else if (command.equals("STORE_ACK")) { @@ -124,13 +138,6 @@ public class Controller extends Server { DStoreFile file = fileIndex.get(filename); file.storeAck(); - - if ( file.ackCheck() ) { - file.setStoreInProgress(false); - file.setStoreComplete(true); - - threadIDOutput("Store of file " + filename + " complete"); - } } else if (command.equals("LOAD")) { diff --git a/src/ftp/DStore.java b/src/ftp/DStore.java index c684ff1550ff5ed6b86223f0a661403debcb139d..af5d2469e82ffc6c2e1fb2829e813393749de8ed 100644 --- a/src/ftp/DStore.java +++ b/src/ftp/DStore.java @@ -104,6 +104,9 @@ public class DStore extends Server { String response = readSocket(client); if (response.equals("ACK")) threadIDOutput("Successfully joined Controller"); + + + closeConnection(client); } else if (command.equals("STORE")) { @@ -125,6 +128,8 @@ public class DStore extends Server { if (controller != null) { send("STORE_ACK " + filename, controller); } else threadIDErr("Unable to connect to Controller"); + + closeConnection(controller); } else if (command.equals("LOAD_DATA")) { diff --git a/src/ftp/Server.java b/src/ftp/Server.java index 383dbb2a7767059f9d3d22042fb35785fd2f1eda..59c55ec55e61ef4b87cfdd1f00ce22e3b5fb42e9 100644 --- a/src/ftp/Server.java +++ b/src/ftp/Server.java @@ -21,9 +21,13 @@ public abstract class Server { public void run() { try { threadIDOutput("Connection Accepted"); - String request = readSocket(client); - handleRequest(request, client); - client.close(); + Boolean closed = false; + while (!closed) { + String request = readSocket(client); + if (request == null) closed = true; + else handleRequest(request, client); + } + closeConnection(client); } catch (Exception e) { threadIDErr("Exception thrown: " + e.getMessage()); } @@ -98,4 +102,10 @@ public abstract class Server { System.err.println("Thread ID: " + Thread.currentThread().getId() + " " + output); } + + + protected void closeConnection(Socket client) { + try {client.close(); threadIDOutput("Connection Closed");} catch (IOException e) {threadIDErr(e.getMessage());} + } + } \ No newline at end of file