package client; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.List; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import server.Machine; import util.CmdLineUtils; import datastructure.FileUnit; public class Client { private static final Logger logger = LogManager.getLogger(Client.class); private ClientRMIManager rmiManager; public Client() { rmiManager = new ClientRMIManager(); } public boolean createFile(String fullFilePath) { if (fullFilePath.equals("")) { return false; } Machine targetMachine = rmiManager.getCreateFileLocation(fullFilePath); if (targetMachine == null) { return false; } if (!rmiManager.connectToStorageServer(targetMachine)) { return false; } return rmiManager.storageServerCreateFile(fullFilePath); } public byte[] randomReadFile(String fullFilePath, long pos, int size) { if (fullFilePath.equals("")) { return null; } Machine targetMachine = rmiManager.getFileLocation(fullFilePath); if (targetMachine == null) { return null; } if (!rmiManager.connectToStorageServer(targetMachine)) { return null; } return rmiManager.storageServerRandomReadFile(fullFilePath, pos, size); } public byte[] getFile(String fullFilePath) { if (fullFilePath.equals("")) { return null; } Machine targetMachine = rmiManager.getFileLocation(fullFilePath); if (targetMachine == null) { return null; } if (!rmiManager.connectToStorageServer(targetMachine)) { return null; } return rmiManager.storageServerGetFile(fullFilePath); } public boolean deleteFile(String fullFilePath) { if (fullFilePath.equals("")) { return false; } Machine targetMachine = rmiManager.getFileLocation(fullFilePath); if (targetMachine == null) { return false; } if (!rmiManager.connectToStorageServer(targetMachine)) { return false; } return rmiManager.storageServerDeleteFile(fullFilePath); } public boolean isExistFile(String fullFilePath) { if (fullFilePath.equals("")) { return false; } Machine targetMachine = rmiManager.getFileLocation(fullFilePath); if (targetMachine == null) { return false; } else { return true; } } public long getSizeOfFile(String fullFilePath) { if (fullFilePath.equals("")) { return -1; } Machine targetMachine = rmiManager.getFileLocation(fullFilePath); if (targetMachine == null) { return -1; } if (!rmiManager.connectToStorageServer(targetMachine)) { return -1; } return rmiManager.storageServerGetSizeOfFile(fullFilePath); } public boolean appendWriteFile(String fullFilePath, byte[] data) { if (fullFilePath.equals("")) { return false; } Machine targetMachine = rmiManager.getFileLocation(fullFilePath); if (targetMachine == null) { return false; } if (!rmiManager.connectToStorageServer(targetMachine)) { return false; } return rmiManager.storageServerAppendWriteFile(fullFilePath, data); } public boolean randomWriteFile(String fullFilePath, long pos, byte[] data) { if (fullFilePath.equals("")) { return false; } Machine targetMachine = rmiManager.getFileLocation(fullFilePath); if (targetMachine == null) { return false; } if (!rmiManager.connectToStorageServer(targetMachine)) { return false; } return rmiManager.storageServerRandomWriteFile(fullFilePath, pos, data); } public boolean createDir(String fullDirPath) { if (fullDirPath.equals("")) { return false; } Machine targetMachine = rmiManager.getCreateDirLocation(fullDirPath); if (targetMachine == null) { return false; } if (!rmiManager.connectToStorageServer(targetMachine)) { return false; } return rmiManager.storageServerCreateDir(fullDirPath); } public boolean deleteDir(String fullDirPath) { if (fullDirPath.equals("")) { return false; } Machine targetMachine = rmiManager.getDirLocation(fullDirPath); if (targetMachine == null) { return false; } if (!rmiManager.connectToStorageServer(targetMachine)) { return false; } return rmiManager.storageServerDeleteDir(fullDirPath); } public List<FileUnit> listDir(String fullDirPath) { List<FileUnit> result = rmiManager.listDir(fullDirPath); return result; } public static void main(String[] args) throws Exception { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); while (true) { String line = br.readLine(); try { String[] argv = CmdLineUtils.parse(line); ClientShell.main(argv); } catch (Exception e) { logger.error(e); e.printStackTrace(); } } // System.out.println(client.createDir("aaa")); // System.out.println(client.createFile("aaa/ddd.txt")); // System.out.println(client.createDir("aaa/bbb")); // System.out.println(client.createFile("aaa/bbb/ddd.txt")); // System.out.println(client.createFile("aaa/bbb/ccc/ddd.txt")); // System.out.println(client.deleteFile("aaa/ddd.tt")); // System.out.println(client.createFile("liuchi.txt")); // byte[] data = "This is a shit.".getBytes("utf8"); // System.out.println(client.appendWriteFile("liuchi.txt", data)); // System.out.println(client.appendWriteFile("liuchi.txt", data)); // String content = new String(client.getFile("liuchi.txt"), "utf8"); // System.out.println(content); // // System.out.println("======================="); // // System.out.println(client.getSizeOfFile("liuchi.txt")); // // List<FileUnit> dir = client.listDir(""); // for (FileUnit fileUnit : dir) { // System.out.println(fileUnit.getName() + " " + fileUnit.isDir()); // } } }