From b6aa605526a1db2a37da699d1cae3b7d59352ba1 Mon Sep 17 00:00:00 2001
From: "isaacklugman@gmail.com" <ik1g19@soton.ac.uk>
Date: Sun, 2 May 2021 19:21:15 +0100
Subject: [PATCH] complete store operation

---
 .../ClientMain.class                          | Bin 2520 -> 2520 bytes
 {testing => ClientAndLoggers}/ClientMain.java |   1 -
 .../ControllerLogger.java                     |   0
 .../DstoreLogger.java                         |   0
 {testing => ClientAndLoggers}/Logger.java     |   0
 {testing => ClientAndLoggers}/Protocol.java   |   1 -
 .../client-1.0.2.jar                          | Bin
 ClientAndLoggers/test.txt                     |   1 +
 Dstores/dstore/test.txt                       |   1 +
 {dstore => Dstores/dstore}/test2.txt          |   0
 Dstores/dstore2/test.txt                      |   1 +
 {dstore2 => Dstores/dstore2}/test2.txt        |   0
 {dstore2 => Dstores/dstore2}/test3.txt        |   0
 Dstores/dstore3/test.txt                      |   1 +
 {dstore3 => Dstores/dstore3}/test2.txt        |   0
 {dstore3 => Dstores/dstore3}/test3.txt        |   0
 {dstore3 => Dstores/dstore3}/test4.txt        |   0
 dstore/test.txt                               |   0
 dstore2/test.txt                              |   0
 dstore3/test.txt                              |   0
 src/ftp/Controller.java                       |  10 ++-
 src/ftp/Dstore.java                           |  64 ++++++++++--------
 src/ftp/DstoreConnection.java                 |   4 +-
 src/ftp/Server.java                           |   2 +
 testing/test.txt                              |   1 -
 25 files changed, 46 insertions(+), 41 deletions(-)
 rename {testing => ClientAndLoggers}/ClientMain.class (88%)
 rename {testing => ClientAndLoggers}/ClientMain.java (98%)
 rename {testing => ClientAndLoggers}/ControllerLogger.java (100%)
 rename {testing => ClientAndLoggers}/DstoreLogger.java (100%)
 rename {testing => ClientAndLoggers}/Logger.java (100%)
 rename {testing => ClientAndLoggers}/Protocol.java (99%)
 rename {testing => ClientAndLoggers}/client-1.0.2.jar (100%)
 create mode 100644 ClientAndLoggers/test.txt
 create mode 100644 Dstores/dstore/test.txt
 rename {dstore => Dstores/dstore}/test2.txt (100%)
 create mode 100644 Dstores/dstore2/test.txt
 rename {dstore2 => Dstores/dstore2}/test2.txt (100%)
 rename {dstore2 => Dstores/dstore2}/test3.txt (100%)
 create mode 100644 Dstores/dstore3/test.txt
 rename {dstore3 => Dstores/dstore3}/test2.txt (100%)
 rename {dstore3 => Dstores/dstore3}/test3.txt (100%)
 rename {dstore3 => Dstores/dstore3}/test4.txt (100%)
 delete mode 100644 dstore/test.txt
 delete mode 100644 dstore2/test.txt
 delete mode 100644 dstore3/test.txt
 delete mode 100644 testing/test.txt

diff --git a/testing/ClientMain.class b/ClientAndLoggers/ClientMain.class
similarity index 88%
rename from testing/ClientMain.class
rename to ClientAndLoggers/ClientMain.class
index 27b4b0711be390b9e87535c87d214850f4561f7f..a51da4fd2f5f2b375bfa6a9dd450c8d797f44c1b 100644
GIT binary patch
delta 131
zcmca1d_#D{OEyN9$*<UwB{>+_88{jE7`PcE7<d@u8F(4Y83Y(?8H6UMv41ucV_;&C
zV&G?xVUT4oWl&@=W6)=iVK87&U~p$JW$<P&V~AleWk_N$V<=!SXDDW{nB2v2TGpC@
jgTaP@m%)xfiou>ihQWcsh{2J;nZbd<lfij%5oa0zgF+Ng

delta 131
zcmca1d_#D{OEyN<$*<UwB{><`8Mqku7<d>Y7<d`v8Tc5?83Y+@8H6XNv41ucXJBHG
zX5eR#WsqesV^Cx;XV7PmWiVh+WN>FNWAJ7$XNX}iV@P5!XDDE>U?^s=oZQ86TGobv
jgTa=8m%*Mviot<FhQX1+h{1`$nZc34lfh+j5oa0zif0sU

diff --git a/testing/ClientMain.java b/ClientAndLoggers/ClientMain.java
similarity index 98%
rename from testing/ClientMain.java
rename to ClientAndLoggers/ClientMain.java
index 0c124ad..3f79c95 100644
--- a/testing/ClientMain.java
+++ b/ClientAndLoggers/ClientMain.java
@@ -1,6 +1,5 @@
 import java.io.File;
 import java.io.IOException;
-import java.util.Random;
 
 public class ClientMain {
 	
diff --git a/testing/ControllerLogger.java b/ClientAndLoggers/ControllerLogger.java
similarity index 100%
rename from testing/ControllerLogger.java
rename to ClientAndLoggers/ControllerLogger.java
diff --git a/testing/DstoreLogger.java b/ClientAndLoggers/DstoreLogger.java
similarity index 100%
rename from testing/DstoreLogger.java
rename to ClientAndLoggers/DstoreLogger.java
diff --git a/testing/Logger.java b/ClientAndLoggers/Logger.java
similarity index 100%
rename from testing/Logger.java
rename to ClientAndLoggers/Logger.java
diff --git a/testing/Protocol.java b/ClientAndLoggers/Protocol.java
similarity index 99%
rename from testing/Protocol.java
rename to ClientAndLoggers/Protocol.java
index 53ae5fb..6c800cb 100644
--- a/testing/Protocol.java
+++ b/ClientAndLoggers/Protocol.java
@@ -1,4 +1,3 @@
-
 public class Protocol {
 
 	// messages from Clients
diff --git a/testing/client-1.0.2.jar b/ClientAndLoggers/client-1.0.2.jar
similarity index 100%
rename from testing/client-1.0.2.jar
rename to ClientAndLoggers/client-1.0.2.jar
diff --git a/ClientAndLoggers/test.txt b/ClientAndLoggers/test.txt
new file mode 100644
index 0000000..abd91bd
--- /dev/null
+++ b/ClientAndLoggers/test.txt
@@ -0,0 +1 @@
+a test file
\ No newline at end of file
diff --git a/Dstores/dstore/test.txt b/Dstores/dstore/test.txt
new file mode 100644
index 0000000..abd91bd
--- /dev/null
+++ b/Dstores/dstore/test.txt
@@ -0,0 +1 @@
+a test file
\ No newline at end of file
diff --git a/dstore/test2.txt b/Dstores/dstore/test2.txt
similarity index 100%
rename from dstore/test2.txt
rename to Dstores/dstore/test2.txt
diff --git a/Dstores/dstore2/test.txt b/Dstores/dstore2/test.txt
new file mode 100644
index 0000000..abd91bd
--- /dev/null
+++ b/Dstores/dstore2/test.txt
@@ -0,0 +1 @@
+a test file
\ No newline at end of file
diff --git a/dstore2/test2.txt b/Dstores/dstore2/test2.txt
similarity index 100%
rename from dstore2/test2.txt
rename to Dstores/dstore2/test2.txt
diff --git a/dstore2/test3.txt b/Dstores/dstore2/test3.txt
similarity index 100%
rename from dstore2/test3.txt
rename to Dstores/dstore2/test3.txt
diff --git a/Dstores/dstore3/test.txt b/Dstores/dstore3/test.txt
new file mode 100644
index 0000000..abd91bd
--- /dev/null
+++ b/Dstores/dstore3/test.txt
@@ -0,0 +1 @@
+a test file
\ No newline at end of file
diff --git a/dstore3/test2.txt b/Dstores/dstore3/test2.txt
similarity index 100%
rename from dstore3/test2.txt
rename to Dstores/dstore3/test2.txt
diff --git a/dstore3/test3.txt b/Dstores/dstore3/test3.txt
similarity index 100%
rename from dstore3/test3.txt
rename to Dstores/dstore3/test3.txt
diff --git a/dstore3/test4.txt b/Dstores/dstore3/test4.txt
similarity index 100%
rename from dstore3/test4.txt
rename to Dstores/dstore3/test4.txt
diff --git a/dstore/test.txt b/dstore/test.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/dstore2/test.txt b/dstore2/test.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/dstore3/test.txt b/dstore3/test.txt
deleted file mode 100644
index e69de29..0000000
diff --git a/src/ftp/Controller.java b/src/ftp/Controller.java
index 3efbd6e..45b985e 100644
--- a/src/ftp/Controller.java
+++ b/src/ftp/Controller.java
@@ -63,7 +63,6 @@ public class Controller extends Server {
         String command = args[0];
 
         if (command.equals("JOIN")) {
-
             Integer port = Integer.parseInt(args[1]);
 
             send("LIST", client);
@@ -83,11 +82,9 @@ public class Controller extends Server {
 
 
             send("ACK", client);
-
         }
 
         else if (command.equals("STORE")) {
-
             String filename = args[1];
             Long filesize = Long.parseLong(args[2]);
 
@@ -105,12 +102,12 @@ public class Controller extends Server {
                     collect(Collectors.joining(" "));
 
 
-            send("STORE_TO " + ports, client);
+            file.setStoreAcksQuota(r);
 
+            send("STORE_TO " + ports, client);
         }
 
         else if (command.equals("STORE_ACK")) {
-
             String filename = args[1];
             DstoreFile file = fileIndex.get(filename);
 
@@ -119,8 +116,9 @@ public class Controller extends Server {
             if ( file.ackCheck() ) {
                 file.setStoreInProgress(false);
                 file.setStoreComplete(true);
-            }
 
+                threadIDOutput("Store of file " + filename + " complete");
+            }
         }
     }
 
diff --git a/src/ftp/Dstore.java b/src/ftp/Dstore.java
index 315694e..63af0af 100644
--- a/src/ftp/Dstore.java
+++ b/src/ftp/Dstore.java
@@ -37,8 +37,7 @@ public class Dstore extends Server {
         this.file_folder = file_folder;
 
 
-        Socket controller = null;
-        connectToController(controller);
+        Socket controller = connectToController();
 
 
         if (controller != null) {
@@ -52,17 +51,19 @@ public class Dstore extends Server {
 
 
 
-    public Socket connectToController(Socket controller) {
+    public Socket connectToController() {
+        Socket controller = null;
+
         Boolean joined = false;
 
         for (int i = 0; (i < 10) && !joined; i++) {
             try { controller = new Socket("localhost",cport); joined = true; }
             catch (IOException e) {
                 threadIDErr(e.getMessage());
-            }
 
-            try {threadIDErr("Retrying Connection..."); Thread.sleep(1000);}
-            catch (InterruptedException e) {threadIDErr(e.getMessage());}
+                try {threadIDErr("Retrying Connection..."); Thread.sleep(1000);}
+                catch (InterruptedException exc) {threadIDErr(exc.getMessage());}
+            }
         }
 
         return controller;
@@ -87,35 +88,36 @@ public class Dstore extends Server {
     protected void handleRequest(String request, Socket client) {
         String args[] = request.split(" ");
 
-        switch(args[0]) {
-            case "LIST":
-                File folder = new File(file_folder);
 
+        String command = args[0];
+
+        if (command.equals("LIST")) {
+            File folder = new File(file_folder);
 
-                //todo use stream instead
-                //
-                List<String> files = new ArrayList<String>() {{
-                    for (File file : folder.listFiles()) add(file.getName() + " " + file.length());
-                }};
 
-                // todo use joining instead of reduce
-                //
-                String ident = files.get(0);
-                files.remove(0);
+            //todo use stream instead
+            //
+            List<String> files = new ArrayList<String>() {{
+                for (File file : folder.listFiles()) add(file.getName() + " " + file.length());
+            }};
 
-                String fileMessage = files.stream()
-                        .reduce( ident, (file1, file2) -> (file1 + "|" + file2) );
+            // todo use joining instead of reduce
+            //
+            String ident = files.get(0);
+            files.remove(0);
 
+            String fileMessage = files.stream()
+                    .reduce(ident, (file1, file2) -> (file1 + "|" + file2));
 
-                send(fileMessage, client);
 
+            send(fileMessage, client);
 
-                String response = readSocket(client);
-                if (response.equals("ACK")) threadIDOutput("Successfully joined Controller");
 
-                break;
+            String response = readSocket(client);
+            if (response.equals("ACK")) threadIDOutput("Successfully joined Controller");
+        }
 
-            case "STORE":
+        else if (command.equals("STORE")) {
                 String filename = args[1];
                 Long filesize = Long.parseLong(args[2]);
 
@@ -129,14 +131,12 @@ public class Dstore extends Server {
                 }
 
 
-                Socket controller = null;
-                connectToController(controller);
+                Socket controller = connectToController();
 
                 if (controller != null) {
                     send("STORE_ACK " + filename, controller);
-                }
-                else threadIDErr("Unable to connect to Controller");
-        }
+                } else threadIDErr("Unable to connect to Controller");
+            }
     }
 
 
@@ -150,10 +150,14 @@ public class Dstore extends Server {
         FileOutputStream out = new FileOutputStream(outputFile);
 
 
+        threadIDOutput("Starting file Read...");
+
         while ((buflen = in.read(buf)) != -1) {
             out.write(buf,0,buflen);
         }
 
+        threadIDOutput("Finished file Write");
+
 
         in.close(); out.close();
 
diff --git a/src/ftp/DstoreConnection.java b/src/ftp/DstoreConnection.java
index b77ca17..b9ae671 100644
--- a/src/ftp/DstoreConnection.java
+++ b/src/ftp/DstoreConnection.java
@@ -24,9 +24,9 @@ public class DstoreConnection {
 
 
 
-    public void addFile(String filename, Long filesize) { file_index.addFile(filename,filesize).addDstore(this); }
+    public void addFile(String filename, Long filesize) { DstoreFile file = file_index.addFile(filename,filesize); }
 
-    public void addFile(DstoreFile file) { file_index.put(file.getFilename(),file).addDstore(this); }
+    public void addFile(DstoreFile file) { file_index.put(file.getFilename(),file); }
 
 
 
diff --git a/src/ftp/Server.java b/src/ftp/Server.java
index aba6c7c..5a70e66 100644
--- a/src/ftp/Server.java
+++ b/src/ftp/Server.java
@@ -26,6 +26,8 @@ public abstract class Server {
                             } catch (Exception e) {
                                 threadIDErr("Exception thrown: " + e.getMessage());
                             }
+
+                            threadIDOutput("Thread Stopping");
                         }
                     }).start();
                 } catch (Exception e) {
diff --git a/testing/test.txt b/testing/test.txt
deleted file mode 100644
index d800886..0000000
--- a/testing/test.txt
+++ /dev/null
@@ -1 +0,0 @@
-123
\ No newline at end of file
-- 
GitLab