diff --git a/src/ClientMain.java b/src/ClientMain.java deleted file mode 100644 index 0d089151b00d3cd8f97822d3d11757906be2488f..0000000000000000000000000000000000000000 --- a/src/ClientMain.java +++ /dev/null @@ -1,123 +0,0 @@ -import java.io.File; -import java.io.IOException; -import java.util.Random; - -public class ClientMain { - - public static void main(String[] args) throws Exception { - - final int cport = Integer.parseInt(args[0]); - int timeout = Integer.parseInt(args[1]); - - File downloadFolder = new File("downloads"); - if (!downloadFolder.exists()) - if (!downloadFolder.mkdir()) throw new RuntimeException("Cannot create download folder (folder absolute path: " + downloadFolder.getAbsolutePath() + ")"); - - File uploadFolder = new File("to_store"); - if (!uploadFolder.exists()) - throw new RuntimeException("to_store folder does not exist"); - - // testClient(cport, timeout, downloadFolder); - - // example to launch a number of concurrent clients, each doing the same operations - for (int i = 0; i < 10; i++) { - new Thread() { - public void run() { - test2Client(cport, timeout, downloadFolder, uploadFolder); - } - }.start(); - } - } - - public static void test2Client(int cport, int timeout, File downloadFolder, File uploadFolder) { - Client client = null; - - try { - client = new Client(cport, timeout, Logger.LoggingType.ON_FILE_AND_TERMINAL); - client.connect(); - Random random = new Random(System.currentTimeMillis() * System.nanoTime()); - - File fileList[] = uploadFolder.listFiles(); - for (int i=0; i<fileList.length/2; i++) { - File fileToStore = fileList[random.nextInt(fileList.length)]; - try { - client.store(fileToStore); - } catch (Exception e) { - System.out.println("Error storing file " + fileToStore); - e.printStackTrace(); - } - } - - String list[] = null; - try { list = list(client); } catch(IOException e) { e.printStackTrace(); } - - for (int i = 0; i < list.length/4; i++) { - String fileToRemove = list[random.nextInt(list.length)]; - try { - client.remove(fileToRemove); - } catch (Exception e) { - System.out.println("Error remove file " + fileToRemove); - e.printStackTrace(); - } - } - - try { list = list(client); } catch(IOException e) { e.printStackTrace(); } - - } catch(IOException e) { - e.printStackTrace(); - } finally { - if (client != null) - try { client.disconnect(); } catch(Exception e) { e.printStackTrace(); } - } - } - - public static void testClient(int cport, int timeout, File downloadFolder) { - Client client = null; - - try { - - client = new Client(cport, timeout, Logger.LoggingType.ON_FILE_AND_TERMINAL); - - try { client.connect(); } catch(IOException e) { e.printStackTrace(); return; } - - try { list(client); } catch(IOException e) { e.printStackTrace(); } - - try { client.store(new File("Clipboard01.pdf")); } catch(IOException e) { e.printStackTrace(); } - - try { client.store(new File("Clipboard01.pdf")); } catch(IOException e) { e.printStackTrace(); } - - try { client.store(new File("Clipboard01.jpg")); } catch(IOException e) { e.printStackTrace(); } - - String list[] = null; - try { list = list(client); } catch(IOException e) { e.printStackTrace(); } - - if (list != null) - for (String filename : list) - try { client.load(filename, downloadFolder); } catch(IOException e) { e.printStackTrace(); } - - /*if (list != null) - for (String filename : list) - try { client.remove(filename); } catch(IOException e) { e.printStackTrace(); } - try { client.remove(list[0]); } catch(IOException e) { e.printStackTrace(); } - - try { list(client); } catch(IOException e) { e.printStackTrace(); }*/ - - } finally { - if (client != null) - try { client.disconnect(); } catch(Exception e) { e.printStackTrace(); } - } - } - - public static String[] list(Client client) throws IOException, NotEnoughDstoresException { - System.out.println("Retrieving list of files..."); - String list[] = client.list(); - - System.out.println("Ok, " + list.length + " files:"); - int i = 0; - for (String filename : list) - System.out.println("[" + i++ + "] " + filename); - - return list; - } - -} diff --git a/src/Controller.java b/src/Controller.java index e33510a4015ac4f7e5dcd2ce372c7000bc33648d..08ef4329c103d8e0ddef9f5d2cba007a8283aab3 100644 --- a/src/Controller.java +++ b/src/Controller.java @@ -10,6 +10,8 @@ public class Controller { // waits for Dstores to join the datastore (rebalance operation) // it doesn't serve any client request until at least R Dstores have joined the system + File file = new File("output.txt"); + public static void main (String[] args) { // port to listen on @@ -35,13 +37,17 @@ public class Controller { ports.add(client); R = R - 1; - BufferedReader in = new BufferedReader( - new InputStreamReader(client.getInputStream())); - String line; - while((line = in.readLine()) != null) - System.out.println(line + " received"); - client.close(); - + Thread t = new Thread() { + @Override + public void run() { + try { + handleDstores(client); + } catch (Exception e) { + e.printStackTrace(); + } + } + }; + t.start(); } else { break; } @@ -54,7 +60,7 @@ public class Controller { /* #TODO - - use threads to connect multiple clients to a server + - use threads to connect multiple clients (Dstore and Client) to a server */ } catch (IOException e) { @@ -62,4 +68,58 @@ public class Controller { } } + + private static void handleDstores(Socket clientSocket) throws IOException, InterruptedException { + OutputStream outputStream = clientSocket.getOutputStream(); + InputStream inputStream = clientSocket.getInputStream(); + + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); + String line; + while((line = reader.readLine()) != null) { + String[] tokens = line.split(" "); + String cmd = tokens[0]; + if(cmd.equals("ACK")) { + + } else if (cmd.equals("STORE_ACK")) { + + } else if (cmd.equals("REMOVE_ACK")) { + + } else if (cmd.equals("QUIT")) { + clientSocket.close(); + break; + } else { + String msg = "unknown command " + line + "\n"; + outputStream.write(msg.getBytes()); + } + + String msg = "You typed " + line + "\n"; + outputStream.write(msg.getBytes()); + } + + if(!clientSocket.isClosed()) { + clientSocket.close(); + } + } + + private void createLogFile() { + try { + if(file.createNewFile()) { + System.out.println("File created"); + } else { + System.out.println("File already exists"); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void log(String message) { + try { + FileWriter writer = new FileWriter(file); + writer.write(message + " at " + System.currentTimeMillis() + "\n"); + writer.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } } \ No newline at end of file