From 17ffbd83ab5c3597f4cbce3f934209dcd0faf0b0 Mon Sep 17 00:00:00 2001
From: "isaacklugman@gmail.com" <ik1g19@soton.ac.uk>
Date: Wed, 21 Apr 2021 20:01:21 +0100
Subject: [PATCH] giving up with nio

---
 src/ftp/Controller.java                       |  6 ++--
 src/ftp/{dstore1 => }/Dstore.java             | 19 +++++-------
 src/ftp/Server.java                           | 29 ++++++++++---------
 {src/ftp/dstore1/storage => storage}/test.txt |  0
 storage/test1.txt                             |  0
 storage/test2.txt                             |  0
 6 files changed, 26 insertions(+), 28 deletions(-)
 rename src/ftp/{dstore1 => }/Dstore.java (85%)
 rename {src/ftp/dstore1/storage => storage}/test.txt (100%)
 create mode 100644 storage/test1.txt
 create mode 100644 storage/test2.txt

diff --git a/src/ftp/Controller.java b/src/ftp/Controller.java
index 388b890..695a828 100644
--- a/src/ftp/Controller.java
+++ b/src/ftp/Controller.java
@@ -27,6 +27,8 @@ public class Controller extends Server {
         this.timeout = timeout;
         this.rbPeriod = rbPeriod;
 
+        allocateBufferBytes(256);
+
         openSelector();
     }
 
@@ -46,13 +48,13 @@ public class Controller extends Server {
 
 
     @Override
-    protected void handleRequest(String request, SelectionKey key, ByteBuffer buffer) {
+    protected void handleRequest(String request, SelectionKey key) {
         String args[] = request.split(" ");
 
         switch(args[0]) {
             case "JOIN":
                 key.attach(new DstoreConnection(new Index(), Integer.parseInt(args[1])));
-                sendMessage("LIST",key,buffer);
+                sendMessage("LIST",key);
                 break;
         }
     }
diff --git a/src/ftp/dstore1/Dstore.java b/src/ftp/Dstore.java
similarity index 85%
rename from src/ftp/dstore1/Dstore.java
rename to src/ftp/Dstore.java
index 5057094..18735c1 100644
--- a/src/ftp/dstore1/Dstore.java
+++ b/src/ftp/Dstore.java
@@ -1,4 +1,4 @@
-package ftp.dstore1;
+package ftp;
 
 import ftp.DstoreConnection;
 import ftp.Index;
@@ -38,9 +38,6 @@ public class Dstore extends Server {
         this.file_folder = file_folder;
 
 
-        ByteBuffer buffer = ByteBuffer.allocate(256);
-
-
         // opening connection to controller
         // open(addr) acts as convenience method for open() and connect()
         // in blocking mode, so will wait for response before progressing
@@ -53,7 +50,9 @@ public class Dstore extends Server {
         }
 
 
-        sendMessage("JOIN " + port, toController, buffer);
+        allocateBufferBytes(256);
+
+        sendMessage("JOIN " + port, toController);
 
         openSelector(new SocketChannel[] {toController});
     }
@@ -92,21 +91,17 @@ public class Dstore extends Server {
 
 
     @Override
-    protected void handleRequest(String request, SelectionKey key, ByteBuffer buffer) {
+    protected void handleRequest(String request, SelectionKey key) {
         String args[] = request.split(" ");
 
         switch(args[0]) {
             case "LIST":
-                File folder = new File("./storage");
+                File folder = new File("storage");
                 String[] files = folder.list();
-//                String fileNames = Arrays.stream(list())
-//                        .map(File::getName)
-//                        .reduce("", (file1, file2) -> file1 + " " + file2);
                 String fileNames = Arrays.stream(files)
                         .reduce("", (file1, file2) -> file1 + " " + file2);
-                System.out.println(fileNames);
 
-                sendMessage(fileNames, key, buffer);
+                sendMessage(fileNames, key);
                 break;
         }
     }
diff --git a/src/ftp/Server.java b/src/ftp/Server.java
index 1e50b25..2794745 100644
--- a/src/ftp/Server.java
+++ b/src/ftp/Server.java
@@ -15,15 +15,20 @@ public abstract class Server {
     protected int timeout;
 
     protected Selector selector;
+    private ByteBuffer buffer;
+
+
+    protected void allocateBufferBytes(int bytes) {
+        buffer = ByteBuffer.allocate(bytes);               //buffer to read/write
+    }
 
 
     /**
      * @desc abstract method which handles server requests based on implmentation
      * @param request request to be handled
      * @param key corresponding key
-     * @param buffer buffer to be used for r/w
      */
-    protected abstract void handleRequest(String request, SelectionKey key, ByteBuffer buffer);
+    protected abstract void handleRequest(String request, SelectionKey key);
 
 
     /**
@@ -36,7 +41,6 @@ public abstract class Server {
         serverSocket.bind(new InetSocketAddress(port));
         serverSocket.configureBlocking(false);
         serverSocket.register(selector, SelectionKey.OP_ACCEPT);
-        ByteBuffer buffer = ByteBuffer.allocate(256);               //buffer to read/write
 
         System.out.println("Selector Started");
 
@@ -59,8 +63,8 @@ public abstract class Server {
 
                 if (key.isReadable()) {
                     System.out.println("Channel has data to be read");
-                    String request = takeRequest(buffer, key);
-                    handleRequest(request, key, buffer);
+                    String request = takeRequest(key);
+                    handleRequest(request, key);
                 }
 
                 iter.remove();
@@ -87,7 +91,7 @@ public abstract class Server {
             channel.register(selector, SelectionKey.OP_READ | SelectionKey.OP_WRITE);
         }
 
-        ByteBuffer buffer = ByteBuffer.allocate(256);               //buffer to read/write
+        buffer = ByteBuffer.allocate(256);               //buffer to read/write
 
         System.out.println("Selector Started");
 
@@ -110,8 +114,8 @@ public abstract class Server {
 
                 if (key.isReadable()) {
                     System.out.println("Channel has data to be read");
-                    String request = takeRequest(buffer, key);
-                    handleRequest(request, key, buffer);
+                    String request = takeRequest(key);
+                    handleRequest(request, key);
                 }
 
                 iter.remove();
@@ -136,12 +140,11 @@ public abstract class Server {
 
     /**
      * @desc reads request from buffer
-     * @param buffer buffer to read request from
      * @param key key linking to the channel
      * @return returns the request
      * @throws IOException
      */
-    protected String takeRequest(ByteBuffer buffer, SelectionKey key) throws IOException {
+    protected String takeRequest(SelectionKey key) throws IOException {
         SocketChannel client = (SocketChannel) key.channel();
         client.read(buffer);
         String request = new String(buffer.array()).trim();
@@ -208,10 +211,9 @@ public abstract class Server {
      * @desc sends a message using a given key, does not wait for a response
      * @param msg message to be sent
      * @param key key of corresponding channel to send message through
-     * @param buffer buffer to r/w messages
      * @return
      */
-    protected void sendMessage(String msg, SelectionKey key, ByteBuffer buffer) {
+    protected void sendMessage(String msg, SelectionKey key) {
         buffer = ByteBuffer.wrap(msg.getBytes());
 
         SocketChannel channel = (SocketChannel) key.channel();
@@ -230,10 +232,9 @@ public abstract class Server {
      * @desc sends a message using a given channel, does not wait for a response
      * @param msg message to be sent
      * @param channel channel to send message through
-     * @param buffer buffer to r/w messages
      * @return
      */
-    protected void sendMessage(String msg, SocketChannel channel, ByteBuffer buffer) {
+    protected void sendMessage(String msg, SocketChannel channel) {
         buffer = ByteBuffer.wrap(msg.getBytes());
 
         try {
diff --git a/src/ftp/dstore1/storage/test.txt b/storage/test.txt
similarity index 100%
rename from src/ftp/dstore1/storage/test.txt
rename to storage/test.txt
diff --git a/storage/test1.txt b/storage/test1.txt
new file mode 100644
index 0000000..e69de29
diff --git a/storage/test2.txt b/storage/test2.txt
new file mode 100644
index 0000000..e69de29
-- 
GitLab