diff --git a/src/ftp/Controller.java b/src/ftp/Controller.java index 388b890e9ac684a6aef9d491dc409eae7209fa49..695a828f24e977dcc99e494d712a4ffc1dfbfd3d 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 5057094d23c75b51b31f3fca1af34f592009fcaf..18735c1e675407e5f42afb2816e6185d755e467a 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 1e50b2532b254be20ad19a4c6343e474aa6813ee..2794745e0ca4bb2469a98506c05b210b9c13143c 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 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/storage/test2.txt b/storage/test2.txt new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391