diff --git a/src/clientP2P/ClientManagement.java b/src/clientP2P/ClientManagement.java index 97f07d2..9cec7bd 100644 --- a/src/clientP2P/ClientManagement.java +++ b/src/clientP2P/ClientManagement.java @@ -1,11 +1,21 @@ package clientP2P; -import tools.HostItem; -import tools.Logger; -import tools.LogLevel; + +import java.util.Arrays; import java.util.Scanner; import java.util.List; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.net.UnknownHostException; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; import localException.ProtocolError; -import tools.ServeErrors; +import localException.InternalError; +import localException.ProtocolError; +import localException.SizeError; +import localException.TransmissionError; +import localException.VersionError; +import localException.SocketClosed; import protocolP2P.RequestResponseCode; import protocolP2P.FileList; import protocolP2P.ProtocolP2PPacket; @@ -13,12 +23,6 @@ import protocolP2P.DiscoverRequest; import protocolP2P.DiscoverResponse; import protocolP2P.Payload; import protocolP2P.HashAlgorithm; -import localException.InternalError; -import localException.ProtocolError; -import localException.SizeError; -import localException.TransmissionError; -import localException.VersionError; -import localException.SocketClosed; import remoteException.EmptyFile; import remoteException.EmptyDirectory; import remoteException.InternalRemoteError; @@ -27,14 +31,10 @@ import remoteException.ProtocolRemoteError; import remoteException.VersionRemoteError; import remoteException.NotATracker; import remoteException.UnknownHost; -import java.io.IOException; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.net.UnknownHostException; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.Arrays; - +import tools.ServeErrors; +import tools.HostItem; +import tools.Logger; +import tools.LogLevel; /** Implementation of P2P-JAVA-PROJECT CLIENT * @author Louis Royer @@ -51,7 +51,7 @@ public abstract class ClientManagement extends ServeErrors implements Runnable { protected Logger logger; protected Scanner scanner; protected ClientDownload downLoader; - + /** Constructor with baseDirectory, tracker, partsSubdir, logger, and scanner parameters. * @param baseDirectory the root directory where files are stored * @param tracker Tracker hostItem @@ -78,7 +78,7 @@ public abstract class ClientManagement extends ServeErrors implements Runnable { /** Getter for tracker socket */ - protected abstract Object getTrackerSocket(); + protected abstract Object getTrackerSocket(); /** Initialize hostList from tracker @@ -229,44 +229,62 @@ public abstract class ClientManagement extends ServeErrors implements Runnable { /** Implementation of Runnable */ public void run() { - try { - String[] list = listDirectory(); - System.out.println("Files present on the server:"); - for(String listItem: list) { - System.out.println(listItem); + boolean isrunning = true; + while (isrunning){ + try { + int i = 1; + String[] list = listDirectory(); + System.out.println("Files present on the server:"); + System.out.println("0 : Exit the program"); + for(String listItem: list) { + System.out.println(i + " : " + listItem); + i++; + } + System.out.println("Type the number associated with the file to download:"); + String f = scanner.nextLine(); + if(f.equals("0")){ + isrunning = false; + } + else{ + int j = Integer.parseInt(f); + if(j <= list.length){ + j--; + download(list[j]); + System.out.println("File " + f + " sucessfully downloaded"); + writeLog("File " + f + " sucessfully downloaded", LogLevel.Info); + } + else{ + System.out.println("File " + f + " unsucessfully downloaded, wrong number"); + writeLog("File " + f + " unsucessfully downloaded, wrong number", LogLevel.Info); + } + } + } catch (EmptyDirectory e) { + writeLog("Server has no file in directory", LogLevel.Error); + } catch (InternalError e) { + writeLog("Client internal error", LogLevel.Error); + } catch (UnknownHostException e) { + writeLog("Server host is unknown", LogLevel.Error); + } catch (IOException e) { + writeLog("Request cannot be send or response cannot be received", LogLevel.Error); + } catch (TransmissionError e) { + writeLog("Message received is too big", LogLevel.Error); + } catch (ProtocolError e) { + writeLog("Cannot decode server’s response", LogLevel.Error); + } catch (VersionError e) { + writeLog("Server’s response use bad version of the protocol", LogLevel.Error); + } catch (SizeError e) { + writeLog("Cannot handle this packets because of internal representation limitations of numbers on the client", LogLevel.Error); + } catch (InternalRemoteError e) { + writeLog("Server internal error", LogLevel.Error); + } catch (ProtocolRemoteError e) { + writeLog("Server cannot decode client’s request", LogLevel.Error); + } catch (VersionRemoteError e) { + writeLog("Server cannot decode this version of the protocol", LogLevel.Error); + } catch (NotFound e) { + writeLog("Server has not this file in directory", LogLevel.Error); + } catch (EmptyFile e) { + writeLog("File is empty", LogLevel.Error); } - System.out.println("Name of the file to download:"); - String f = scanner.nextLine(); - download(f); - System.out.println("File " + f + " sucessfully downloaded"); - writeLog("File " + f + " sucessfully downloaded", LogLevel.Info); - } catch (EmptyDirectory e) { - writeLog("Server has no file in directory", LogLevel.Error); - } catch (InternalError e) { - writeLog("Client internal error", LogLevel.Error); - } catch (UnknownHostException e) { - writeLog("Server host is unknown", LogLevel.Error); - } catch (IOException e) { - writeLog("Request cannot be send or response cannot be received", LogLevel.Error); - } catch (TransmissionError e) { - writeLog("Message received is too big", LogLevel.Error); - } catch (ProtocolError e) { - writeLog("Cannot decode server’s response", LogLevel.Error); - } catch (VersionError e) { - writeLog("Server’s response use bad version of the protocol", LogLevel.Error); - } catch (SizeError e) { - writeLog("Cannot handle this packets because of internal representation limitations of numbers on the client", LogLevel.Error); - } catch (InternalRemoteError e) { - writeLog("Server internal error", LogLevel.Error); - } catch (ProtocolRemoteError e) { - writeLog("Server cannot decode client’s request", LogLevel.Error); - } catch (VersionRemoteError e) { - writeLog("Server cannot decode this version of the protocol", LogLevel.Error); - } catch (NotFound e) { - writeLog("Server has not this file in directory", LogLevel.Error); - } catch (EmptyFile e) { - writeLog("File is empty", LogLevel.Error); } } - } diff --git a/src/clientP2P/ClientP2P.java b/src/clientP2P/ClientP2P.java index 15c8acc..ec63ef3 100644 --- a/src/clientP2P/ClientP2P.java +++ b/src/clientP2P/ClientP2P.java @@ -4,7 +4,6 @@ import java.util.Scanner; import java.util.List; import clientP2P.ClientManagementUDP; import clientP2P.ClientManagementTCP; - import serverP2P.ServerManagementUDP; import serverP2P.ServerManagementTCP; import tools.Logger; @@ -14,7 +13,6 @@ import tools.HostItem; import tools.ServerPortRange; import tools.TrackerPortRange; - /** Client + Server implementation. * @author Louis Royer * @author Flavien Haas @@ -31,7 +29,7 @@ public class ClientP2P { private HostItem tracker; private HostItem server; private Scanner scanner; - + /** Initialize loggers if directories and logger are null, * else fail silently. */ @@ -49,7 +47,7 @@ public class ClientP2P { * @param hostnameServer hostname to bind * @param portServer port to bind * @param hostnameTracker hostname of tracker - * @param portTracker port of tracker + * @param portTracker port of tracker */ public ClientP2P(String hostnameServer, int portServer, String hostnameTracker, int portTracker) { scanner = new Scanner(System.in);