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