Documentation (#36) #44

Merged
louis_royer merged 1 commits from documentation into master 5 years ago

@ -185,7 +185,11 @@ public class ClientDownloadPartTCP implements Runnable {
} }
} }
public ProtocolP2PPacketTCP reqPart(Long offset) { /** Send a request for a specific offset.
* @param offset Offset of the file part to download
* @return ProtocolP2PPacketTCP used to send request
*/
private ProtocolP2PPacketTCP reqPart(Long offset) {
System.err.println("New request: "+ offset); System.err.println("New request: "+ offset);
// maintain tracking of tasks // maintain tracking of tasks
if (toDoTasks.contains(offset)) { if (toDoTasks.contains(offset)) {
@ -226,6 +230,10 @@ public class ClientDownloadPartTCP implements Runnable {
} }
} }
/** Download file part associated to the request send (d).
* @param d request packet
* @return true on failure, else false
*/
public boolean downloadPart(ProtocolP2PPacketTCP d) { public boolean downloadPart(ProtocolP2PPacketTCP d) {
if (d == null) { if (d == null) {
System.err.println("Error: downloadPart -> d is null."); System.err.println("Error: downloadPart -> d is null.");

@ -180,7 +180,11 @@ public class ClientDownloadPartUDP implements Runnable {
} }
} }
public ProtocolP2PPacketUDP reqPart(Long offset) { /** Send a request for a specific offset.
* @param offset Offset of the file part to download
* @return ProtocolP2PPacketTCP used to send request
*/
private ProtocolP2PPacketUDP reqPart(Long offset) {
System.err.println("New request: "+ offset); System.err.println("New request: "+ offset);
// maintain tracking of tasks // maintain tracking of tasks
if (toDoTasks.contains(offset)) { if (toDoTasks.contains(offset)) {
@ -218,6 +222,10 @@ public class ClientDownloadPartUDP implements Runnable {
} }
} }
/** Download file part associated to the request send (d).
* @param d request packet
* @return true on failure, else false
*/
public boolean downloadPart(ProtocolP2PPacketUDP d) { public boolean downloadPart(ProtocolP2PPacketUDP d) {
if (d == null) { if (d == null) {
System.err.println("Error: downloadPart -> d is null."); System.err.println("Error: downloadPart -> d is null.");

@ -352,6 +352,9 @@ public class ClientDownloadTCP implements Runnable {
return success; return success;
} }
/** Reassemble file from file parts.
* Set success to true if file is reassembled successfully.
*/
private void reassembleFile() { private void reassembleFile() {
boolean firstPart = true; boolean firstPart = true;
boolean abort = false; boolean abort = false;

@ -346,6 +346,9 @@ public class ClientDownloadUDP implements Runnable {
return success; return success;
} }
/** Reassemble file from file parts.
* Set success to true if file is reassembled successfully.
*/
private void reassembleFile() { private void reassembleFile() {
boolean firstPart = true; boolean firstPart = true;
boolean abort = false; boolean abort = false;

@ -12,8 +12,6 @@ import remoteException.ProtocolRemoteError;
import remoteException.VersionRemoteError; import remoteException.VersionRemoteError;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.util.Scanner; import java.util.Scanner;
//import java.net.InetAddress;
//import java.net.SocketException;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.io.File; import java.io.File;

@ -12,9 +12,7 @@ import remoteException.ProtocolRemoteError;
import remoteException.VersionRemoteError; import remoteException.VersionRemoteError;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.util.Scanner; import java.util.Scanner;
//import java.net.InetAddress;
import java.net.DatagramSocket; import java.net.DatagramSocket;
//import java.net.SocketException;
import java.io.IOException; import java.io.IOException;
import java.nio.file.Files; import java.nio.file.Files;
import java.io.File; import java.io.File;

@ -11,8 +11,13 @@ import java.util.Scanner;
import java.util.List; import java.util.List;
import tools.HostItem; import tools.HostItem;
import tools.HostList; import tools.HostList;
import java.lang.NumberFormatException;
/** Client + Server implementation.
* @author Louis Royer
* @author Flavien Haas
* @author JS Auge
* @version 1.0
*/
public class ClientP2P { public class ClientP2P {
static private final String subdir = "seeded/"; static private final String subdir = "seeded/";
static private String parts = ".parts"; static private String parts = ".parts";
@ -23,6 +28,10 @@ public class ClientP2P {
private List<HostItem> hostList; private List<HostItem> hostList;
private static final int defaultPort = 20000; private static final int defaultPort = 20000;
/** Initialize logger if directories and logger are null,
* else fail silently.
*/
public void initLogger() { public void initLogger() {
if (directories == null && logger == null) { if (directories == null && logger == null) {
directories = new Directories("P2P_JAVA_PROJECT" + port); directories = new Directories("P2P_JAVA_PROJECT" + port);
@ -30,6 +39,9 @@ public class ClientP2P {
} }
} }
/** Constructor with portStr as parameter.
* @param portStr String containing port for server listenning.
*/
public ClientP2P(String portStr) { public ClientP2P(String portStr) {
try{ try{
port = Integer.valueOf(Integer.parseInt(portStr)); port = Integer.valueOf(Integer.parseInt(portStr));
@ -49,6 +61,11 @@ public class ClientP2P {
System.out.println("Please enter list of servers to use; first one will be used to ask list of files"); System.out.println("Please enter list of servers to use; first one will be used to ask list of files");
} }
/** Main program entry point.
* 1rst parameter is optionnal, and is used to
* define port used by the server module to listen. If not provided, default to another port.
* @param args server listenning port
*/
public static void main(String [] args) { public static void main(String [] args) {
ClientP2P c; ClientP2P c;
try { try {
@ -57,21 +74,25 @@ public class ClientP2P {
c = new ClientP2P("" + defaultPort); c = new ClientP2P("" + defaultPort);
} }
// Server threads
ServerManagementUDP smudp = new ServerManagementUDP(c.directories.getDataHomeDirectory() + subdir, c.port, c.logger); ServerManagementUDP smudp = new ServerManagementUDP(c.directories.getDataHomeDirectory() + subdir, c.port, c.logger);
ServerManagementTCP smtcp = new ServerManagementTCP(c.directories.getDataHomeDirectory() + subdir, c.port, c.logger); ServerManagementTCP smtcp = new ServerManagementTCP(c.directories.getDataHomeDirectory() + subdir, c.port, c.logger);
Thread tudp = new Thread(smudp); Thread tudp = new Thread(smudp);
tudp.setName("server UDP P2P-JAVA-PROJECT"); tudp.setName("server UDP P2P-JAVA-PROJECT (port: " + c.port + ")");
tudp.start(); tudp.start();
Thread ttcp = new Thread(smtcp); Thread ttcp = new Thread(smtcp);
ttcp.setName("server TCP P2P-JAVA-PROJECT"); ttcp.setName("server TCP P2P-JAVA-PROJECT (port: " + c.port + ")");
ttcp.start(); ttcp.start();
// Wait a bit before printing client interface
// This is not required, but allow to have a cleaner interface
try { try {
Thread.sleep(100); Thread.sleep(100);
} catch(InterruptedException e) { } catch(InterruptedException e) {
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();
} }
// initialize Host lists
c.hostList = HostList.getServList(); c.hostList = HostList.getServList();
System.out.println("Client : Which transport protocol do you want to use? [TCP/udp]"); System.out.println("Client : Which transport protocol do you want to use? [TCP/udp]");
Scanner sc = new Scanner(System.in); Scanner sc = new Scanner(System.in);

@ -4,13 +4,22 @@ import serverP2P.ServerManagementTCP;
import tools.Directories; import tools.Directories;
import tools.Logger; import tools.Logger;
/** Server only implementation
* First argument of main method is port listened by the server, and is mandatory.
* @author Louis Royer
* @author Flavien Haas
* @author JS Auge
* @version 1.0
*/
public class ServerP2P { public class ServerP2P {
private int port; private int port;
private Directories directories; private Directories directories;
static private final String subdir = "seeded/"; static private final String subdir = "seeded/";
private Logger logger; private Logger logger;
/** Constructor with portStr containing a port number.
* @param portStr String containing port number of listening.
*/
public ServerP2P(String portStr) { public ServerP2P(String portStr) {
port = Integer.valueOf(Integer.parseInt(portStr)); port = Integer.valueOf(Integer.parseInt(portStr));
directories = new Directories("P2P_JAVA_PROJECT_SERVER_" + port); directories = new Directories("P2P_JAVA_PROJECT_SERVER_" + port);
@ -19,10 +28,13 @@ public class ServerP2P {
System.out.println("Server will listen on port " + port + " and serve files from " + directories.getDataHomeDirectory() + subdir); System.out.println("Server will listen on port " + port + " and serve files from " + directories.getDataHomeDirectory() + subdir);
directories.askOpenDataHomeDirectory(subdir); directories.askOpenDataHomeDirectory(subdir);
} }
public static void main(String [] args) {
/* first arg must be port number /** Main program entry point
* run with: java -ea serverP2P.ServerP2P -- <portNumber> * first parameter is port number and is mandatory
* */ * to test, run with: java -ea serverP2P.ServerP2P -- <portNumber>
* @param args parameters
*/
public static void main(String [] args) {
ServerP2P s = new ServerP2P(args[1]); ServerP2P s = new ServerP2P(args[1]);
ServerManagementUDP smudp = new ServerManagementUDP(s.directories.getDataHomeDirectory() + subdir, s.port, s.logger); ServerManagementUDP smudp = new ServerManagementUDP(s.directories.getDataHomeDirectory() + subdir, s.port, s.logger);
ServerManagementTCP smtcp = new ServerManagementTCP(s.directories.getDataHomeDirectory() + subdir, s.port, s.logger); ServerManagementTCP smtcp = new ServerManagementTCP(s.directories.getDataHomeDirectory() + subdir, s.port, s.logger);

Loading…
Cancel
Save