|
|
|
@ -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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|