Refactoring
This commit is contained in:
parent
64032e84c4
commit
7253a34e49
@ -2,7 +2,6 @@ package clientP2P;
|
|||||||
|
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import javafx.util.Pair;
|
|
||||||
import clientP2P.ClientManagementUDP;
|
import clientP2P.ClientManagementUDP;
|
||||||
import clientP2P.ClientManagementTCP;
|
import clientP2P.ClientManagementTCP;
|
||||||
|
|
||||||
@ -12,7 +11,9 @@ import tools.Logger;
|
|||||||
import tools.LogLevel;
|
import tools.LogLevel;
|
||||||
import tools.Directories;
|
import tools.Directories;
|
||||||
import tools.HostItem;
|
import tools.HostItem;
|
||||||
import tools.TestPort;
|
import tools.ServerPortRange;
|
||||||
|
import tools.TrackerPortRange;
|
||||||
|
|
||||||
|
|
||||||
/** Client + Server implementation.
|
/** Client + Server implementation.
|
||||||
* @author Louis Royer
|
* @author Louis Royer
|
||||||
@ -26,17 +27,17 @@ public class ClientP2P {
|
|||||||
private String partsDir = ".parts/";
|
private String partsDir = ".parts/";
|
||||||
private Logger loggerServer;
|
private Logger loggerServer;
|
||||||
private Logger loggerClient;
|
private Logger loggerClient;
|
||||||
private int portServer;
|
|
||||||
private Directories directories;
|
private Directories directories;
|
||||||
private HostItem tracker;
|
private HostItem tracker;
|
||||||
|
private HostItem server;
|
||||||
private Scanner scanner;
|
private Scanner scanner;
|
||||||
|
|
||||||
/** Initialize loggers if directories and logger are null,
|
/** Initialize loggers if directories and logger are null,
|
||||||
* else fail silently.
|
* else fail silently.
|
||||||
*/
|
*/
|
||||||
public void initDirectoriesAndLoggers() {
|
public void initDirectoriesAndLoggers() {
|
||||||
if (directories == null && loggerServer == null && loggerClient == null) {
|
if (directories == null && loggerServer == null && loggerClient == null) {
|
||||||
directories = new Directories("P2P_JAVA_PROJECT_" + portServer);
|
directories = new Directories("P2P_JAVA_PROJECT_" + server.getPort());
|
||||||
directories.createSubdir(logDir);
|
directories.createSubdir(logDir);
|
||||||
loggerServer = new Logger(directories.getDataHomeDirectory() + logDir + "server.log");
|
loggerServer = new Logger(directories.getDataHomeDirectory() + logDir + "server.log");
|
||||||
loggerClient = new Logger(directories.getDataHomeDirectory() + logDir + "client.log");
|
loggerClient = new Logger(directories.getDataHomeDirectory() + logDir + "client.log");
|
||||||
@ -44,18 +45,36 @@ public class ClientP2P {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Constructor with portServerstr as parameter.
|
/** Constructor.
|
||||||
* @param portServerstr String containing port for server listenning.
|
* @param hostnameServer hostname to bind
|
||||||
|
* @param portServer port to bind
|
||||||
|
* @param hostnameTracker hostname of tracker
|
||||||
|
* @param portTracker port of tracker
|
||||||
*/
|
*/
|
||||||
public ClientP2P(String portServerstr, String hostnameTracker, String portTracker) {
|
public ClientP2P(String hostnameServer, int portServer, String hostnameTracker, int portTracker) {
|
||||||
scanner = new Scanner(System.in);
|
scanner = new Scanner(System.in);
|
||||||
portServer = Integer.valueOf(Integer.parseInt(portServerstr));
|
server = new HostItem(hostnameServer, portServer);
|
||||||
tracker = new HostItem(hostnameTracker, Integer.valueOf(Integer.parseInt(portTracker)));
|
tracker = new HostItem(hostnameTracker, portTracker);
|
||||||
initDirectoriesAndLoggers();
|
initDirectoriesAndLoggers();
|
||||||
System.out.println("Server will listen on port " + portServer + " and serve files from " + directories.getDataHomeDirectory());
|
System.out.println("Server will listen on port " + portServer + " and serve files from " + directories.getDataHomeDirectory());
|
||||||
directories.askOpenDataHomeDirectory(null, scanner);
|
directories.askOpenDataHomeDirectory(null, scanner);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Print cli usage
|
||||||
|
* @param serverPortRange range of server ports
|
||||||
|
* @param trackerPortRange range of tracker ports
|
||||||
|
*/
|
||||||
|
private static void printUsage(ServerPortRange serverPortRange, TrackerPortRange trackerPortRange) {
|
||||||
|
System.out.println("usage :");
|
||||||
|
System.out.println("\tjava clientP2P.ClientP2P");
|
||||||
|
System.out.println("or");
|
||||||
|
System.out.println("java clientP2P.ClientP2P -- " +
|
||||||
|
"<clientTransportProtocol> " +
|
||||||
|
"<integratedServerHOSTNAME> <integratedServerPORT> " +
|
||||||
|
"<trackerHOSTNAME> <trackerPORT> ");
|
||||||
|
System.out.println("(" + trackerPortRange + " and " + serverPortRange +")");
|
||||||
|
}
|
||||||
|
|
||||||
/** Main program entry point.
|
/** Main program entry point.
|
||||||
* 1rst parameter is optionnal, and is used to
|
* 1rst parameter is optionnal, and is used to
|
||||||
* define port used by the server module to listen. If not provided, default to another port.
|
* define port used by the server module to listen. If not provided, default to another port.
|
||||||
@ -63,121 +82,120 @@ public class ClientP2P {
|
|||||||
*/
|
*/
|
||||||
public static void main(String [] args) {
|
public static void main(String [] args) {
|
||||||
final String defaultHostname = "localhost";
|
final String defaultHostname = "localhost";
|
||||||
final String defaultPortServer = "7070";
|
|
||||||
final String defaultPortTracker = "6969";
|
|
||||||
String hostnameServer = "";
|
String hostnameServer = "";
|
||||||
String portServer = "";
|
int portServer = 0;
|
||||||
String hostnameTracker = "";
|
String hostnameTracker = "";
|
||||||
String portTracker = "";
|
int portTracker = 0;
|
||||||
String protocolClient = "";
|
String protocolClient = "";
|
||||||
Scanner scanner = new Scanner(System.in);
|
Scanner scanner = new Scanner(System.in);
|
||||||
TestPort testPort = new TestPort();
|
final ServerPortRange serverPortRange = new ServerPortRange();
|
||||||
|
final TrackerPortRange trackerPortRange = new TrackerPortRange();
|
||||||
|
|
||||||
if ((args.length != 6) && (args.length != 0)){
|
if ((args.length != 6) && (args.length != 0)){
|
||||||
System.out.println("usage : java clientP2P.ClientP2P or java clientP2P.ClientP2P -- <clientTransportProtocol> <integratedServerHOSTNAME> <integratedServerPORT> <trackerHOSTNAME> <trackerPORT> (default tracker port 6969 (range 7000 -> 7999) and server port: server 7070 (range 7000->7070))");
|
ClientP2P.printUsage(serverPortRange, trackerPortRange);
|
||||||
|
System.exit(1);
|
||||||
}
|
}
|
||||||
else{
|
else if(args.length == 6){
|
||||||
if(args.length == 6){
|
|
||||||
protocolClient = args[1];
|
protocolClient = args[1];
|
||||||
hostnameServer = args[2];
|
hostnameServer = args[2];
|
||||||
portServer = args[3];
|
portServer = Integer.valueOf(Integer.parseInt(args[3]));
|
||||||
hostnameTracker = args[4];
|
hostnameTracker = args[4];
|
||||||
portTracker = args[5];
|
portTracker = Integer.valueOf(Integer.parseInt(args[5]));
|
||||||
|
} else{
|
||||||
|
System.out.println("Client, wich transport protocol do you want to use (default = TCP): ");
|
||||||
|
protocolClient = scanner.nextLine();
|
||||||
|
System.out.println("server side, enter hostname to bind (default = localhost): ");
|
||||||
|
hostnameServer = scanner.nextLine();
|
||||||
|
if(hostnameServer.equals("")){
|
||||||
|
hostnameServer = defaultHostname;
|
||||||
|
System.out.println("using default hostname : " + hostnameServer);
|
||||||
}
|
}
|
||||||
else{
|
System.out.println("enter port (default = " + serverPortRange.getDefaultPort() +"): ");
|
||||||
System.out.println("Client, wich transport protocol do you want to use (default = TCP): ");
|
String portServerStr = scanner.nextLine();
|
||||||
protocolClient = scanner.nextLine();
|
if(portServerStr.equals("")){
|
||||||
System.out.println("server side, enter hostname to bind (default = localhost): ");
|
portServer = serverPortRange.getDefaultPort();
|
||||||
hostnameServer = scanner.nextLine();
|
System.out.println("using default port : " + portServer);
|
||||||
if(hostnameServer.equals("")){
|
} else {
|
||||||
hostnameServer = defaultHostname;
|
portServer = Integer.valueOf(Integer.parseInt(portServerStr));
|
||||||
System.out.println("using default hostname : " + hostnameServer);
|
|
||||||
}
|
|
||||||
System.out.println("enter port (default = 7070): ");
|
|
||||||
portServer = scanner.nextLine();
|
|
||||||
if(portServer.equals("")){
|
|
||||||
portServer = defaultPortServer;
|
|
||||||
System.out.println("using default port : " + portServer);
|
|
||||||
}
|
|
||||||
System.out.println("enter hostname of tracker (default = localhost): ");
|
|
||||||
hostnameTracker = scanner.nextLine();
|
|
||||||
if(hostnameTracker.equals("")){
|
|
||||||
hostnameTracker = defaultHostname;
|
|
||||||
System.out.println("tracker default hostname : " + hostnameTracker);
|
|
||||||
}
|
|
||||||
System.out.println("enter tracker's port (default = 6969): ");
|
|
||||||
portTracker = scanner.nextLine();
|
|
||||||
if(portTracker.equals("")){
|
|
||||||
portTracker = defaultPortTracker;
|
|
||||||
System.out.println("using default port : " + portTracker);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
System.out.println("enter hostname of tracker (default = localhost): ");
|
||||||
System.out.println("using hostname : " + hostnameServer);
|
hostnameTracker = scanner.nextLine();
|
||||||
Pair<Integer, String> PtestPortServer = testPort.testPortServer(Integer.parseInt(portServer));
|
if(hostnameTracker.equals("")){
|
||||||
if(PtestPortServer.getKey() == 0){
|
hostnameTracker = defaultHostname;
|
||||||
System.out.println("using port : " + portServer);
|
System.out.println("tracker default hostname : " + hostnameTracker);
|
||||||
}
|
}
|
||||||
else {
|
System.out.println("enter tracker's port (default = "+trackerPortRange.getDefaultPort() + "): ");
|
||||||
System.out.println(PtestPortServer.getValue());
|
String portTrackerStr = scanner.nextLine();
|
||||||
portServer = defaultPortServer;
|
if(portTrackerStr.equals("")){
|
||||||
|
portTracker = trackerPortRange.getDefaultPort();
|
||||||
|
System.out.println("using default port : " + portTracker);
|
||||||
|
} else {
|
||||||
|
portTracker = Integer.valueOf(Integer.parseInt(portTrackerStr));
|
||||||
}
|
}
|
||||||
System.out.println("tracker hostname : " + hostnameTracker);
|
|
||||||
|
|
||||||
Pair<Integer, String> PtestPortTracker = testPort.testPortTracker(Integer.parseInt(portTracker));
|
|
||||||
if(PtestPortTracker.getKey() == 0){
|
|
||||||
System.out.println("using port : " + portTracker);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
System.out.println(PtestPortTracker.getValue());
|
|
||||||
portTracker = defaultPortTracker;
|
|
||||||
}
|
|
||||||
|
|
||||||
ClientP2P c = new ClientP2P(portServer, hostnameTracker, portTracker);
|
|
||||||
|
|
||||||
ServerManagementUDP smudp = new ServerManagementUDP(c.directories.getDataHomeDirectory(), hostnameServer, c.portServer, c.loggerServer, c.tracker);
|
|
||||||
ServerManagementTCP smtcp = new ServerManagementTCP(c.directories.getDataHomeDirectory(), hostnameServer, c.portServer, c.loggerServer, c.tracker);
|
|
||||||
Thread tudp = new Thread(smudp);
|
|
||||||
tudp.setName("server UDP P2P-JAVA-PROJECT");
|
|
||||||
tudp.start();
|
|
||||||
Thread ttcp = new Thread(smtcp);
|
|
||||||
ttcp.setName("server TCP P2P-JAVA-PROJECT");
|
|
||||||
ttcp.start();
|
|
||||||
|
|
||||||
// Wait a bit before printing client interface
|
|
||||||
// This is not required, but allow to have a cleaner interface
|
|
||||||
try {
|
|
||||||
Thread.sleep(200);
|
|
||||||
} catch(InterruptedException e) {
|
|
||||||
Thread.currentThread().interrupt();
|
|
||||||
}
|
|
||||||
|
|
||||||
Thread tclient;
|
|
||||||
switch(protocolClient){
|
|
||||||
case "UDP":
|
|
||||||
case "udp":
|
|
||||||
case "upd":
|
|
||||||
case "2" :
|
|
||||||
System.out.println("Starting with UDP");
|
|
||||||
ClientManagementUDP cmudp = new ClientManagementUDP(c.directories.getDataHomeDirectory(), c.tracker, c.directories.getDataHomeDirectory() + c.partsDir, c.loggerClient, c.scanner);
|
|
||||||
tclient = new Thread(cmudp);
|
|
||||||
break;
|
|
||||||
case "TCP":
|
|
||||||
case "tcp":
|
|
||||||
case "1":
|
|
||||||
default:
|
|
||||||
System.out.println("Starting with TCP");
|
|
||||||
ClientManagementTCP cmtcp = new ClientManagementTCP(c.directories.getDataHomeDirectory(), c.tracker, c.directories.getDataHomeDirectory() + c.partsDir, c.loggerClient, c.scanner);
|
|
||||||
tclient = new Thread(cmtcp);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
tclient.setName("client P2P-JAVA-PROJECT");
|
|
||||||
tclient.start();
|
|
||||||
try {
|
|
||||||
tclient.join();
|
|
||||||
} catch (InterruptedException e) {}
|
|
||||||
smudp.setStop();
|
|
||||||
smtcp.setStop();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
System.out.println("using hostname : " + hostnameServer);
|
||||||
|
if(serverPortRange.isPortInRange(portServer)){
|
||||||
|
System.out.println("using port : " + portServer);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
System.out.println("Port not in range. " + serverPortRange);
|
||||||
|
portServer = serverPortRange.getDefaultPort();
|
||||||
|
}
|
||||||
|
System.out.println("tracker hostname : " + hostnameTracker);
|
||||||
|
|
||||||
|
if(trackerPortRange.isPortInRange(portTracker)){
|
||||||
|
System.out.println("using port : " + portTracker);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
System.out.println("Port not in range. " + trackerPortRange);
|
||||||
|
portTracker = trackerPortRange.getDefaultPort();
|
||||||
|
}
|
||||||
|
|
||||||
|
ClientP2P c = new ClientP2P(hostnameServer, portServer, hostnameTracker, portTracker);
|
||||||
|
|
||||||
|
ServerManagementUDP smudp = new ServerManagementUDP(c.directories.getDataHomeDirectory(), c.server, c.tracker, c.loggerServer);
|
||||||
|
ServerManagementTCP smtcp = new ServerManagementTCP(c.directories.getDataHomeDirectory(), c.server, c.tracker, c.loggerServer);
|
||||||
|
Thread tudp = new Thread(smudp);
|
||||||
|
tudp.setName("server UDP P2P-JAVA-PROJECT");
|
||||||
|
tudp.start();
|
||||||
|
Thread ttcp = new Thread(smtcp);
|
||||||
|
ttcp.setName("server TCP P2P-JAVA-PROJECT");
|
||||||
|
ttcp.start();
|
||||||
|
|
||||||
|
// Wait a bit before printing client interface
|
||||||
|
// This is not required, but allow to have a cleaner interface
|
||||||
|
try {
|
||||||
|
Thread.sleep(200);
|
||||||
|
} catch(InterruptedException e) {
|
||||||
|
Thread.currentThread().interrupt();
|
||||||
|
}
|
||||||
|
|
||||||
|
Thread tclient;
|
||||||
|
switch(protocolClient){
|
||||||
|
case "UDP":
|
||||||
|
case "udp":
|
||||||
|
case "upd": // to avoid users typos
|
||||||
|
case "2" :
|
||||||
|
System.out.println("Starting with UDP");
|
||||||
|
ClientManagementUDP cmudp = new ClientManagementUDP(c.directories.getDataHomeDirectory(), c.tracker, c.directories.getDataHomeDirectory() + c.partsDir, c.loggerClient, c.scanner);
|
||||||
|
tclient = new Thread(cmudp);
|
||||||
|
break;
|
||||||
|
case "TCP":
|
||||||
|
case "tcp":
|
||||||
|
case "1":
|
||||||
|
default:
|
||||||
|
System.out.println("Starting with TCP");
|
||||||
|
ClientManagementTCP cmtcp = new ClientManagementTCP(c.directories.getDataHomeDirectory(), c.tracker, c.directories.getDataHomeDirectory() + c.partsDir, c.loggerClient, c.scanner);
|
||||||
|
tclient = new Thread(cmtcp);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
tclient.setName("client P2P-JAVA-PROJECT");
|
||||||
|
tclient.start();
|
||||||
|
try {
|
||||||
|
tclient.join();
|
||||||
|
} catch (InterruptedException e) {}
|
||||||
|
smudp.setStop();
|
||||||
|
smtcp.setStop();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -56,8 +56,8 @@ public class ServerManagementTCP extends ServerManagement {
|
|||||||
* @param logger Logger item
|
* @param logger Logger item
|
||||||
* @param tracker Tracker
|
* @param tracker Tracker
|
||||||
*/
|
*/
|
||||||
public ServerManagementTCP(String baseDirectory, String hostName, int port, Logger logger, HostItem tracker) {
|
public ServerManagementTCP(String baseDirectory, HostItem server, HostItem tracker, Logger logger) {
|
||||||
super(baseDirectory, new HostItem(hostName, port), tracker, logger);
|
super(baseDirectory, server, tracker, logger);
|
||||||
assert baseDirectory != null : "baseDirectory is null";
|
assert baseDirectory != null : "baseDirectory is null";
|
||||||
assert server != null : "server is null";
|
assert server != null : "server is null";
|
||||||
assert tracker != null : "tracker is null";
|
assert tracker != null : "tracker is null";
|
||||||
|
@ -54,8 +54,8 @@ public class ServerManagementUDP extends ServerManagement {
|
|||||||
* @param logger Logger item
|
* @param logger Logger item
|
||||||
* @param tracker Tracker
|
* @param tracker Tracker
|
||||||
*/
|
*/
|
||||||
public ServerManagementUDP(String baseDirectory, String hostName, int port, Logger logger, HostItem tracker) {
|
public ServerManagementUDP(String baseDirectory, HostItem server, HostItem tracker, Logger logger) {
|
||||||
super(baseDirectory, new HostItem(hostName, port), tracker, logger);
|
super(baseDirectory, server, tracker, logger);
|
||||||
assert baseDirectory != null : "baseDirectory is null";
|
assert baseDirectory != null : "baseDirectory is null";
|
||||||
assert server != null : "server is null";
|
assert server != null : "server is null";
|
||||||
assert tracker != null : "tracker is null";
|
assert tracker != null : "tracker is null";
|
||||||
|
@ -1,13 +1,13 @@
|
|||||||
package serverP2P;
|
package serverP2P;
|
||||||
|
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
import javafx.util.Pair;
|
|
||||||
import serverP2P.ServerManagementUDP;
|
import serverP2P.ServerManagementUDP;
|
||||||
import serverP2P.ServerManagementTCP;
|
import serverP2P.ServerManagementTCP;
|
||||||
import tools.Directories;
|
import tools.Directories;
|
||||||
import tools.Logger;
|
import tools.Logger;
|
||||||
import tools.HostItem;
|
import tools.HostItem;
|
||||||
import tools.TestPort;
|
import tools.ServerPortRange;
|
||||||
|
import tools.TrackerPortRange;
|
||||||
|
|
||||||
|
|
||||||
/** Server only implementation
|
/** Server only implementation
|
||||||
@ -18,19 +18,22 @@ import tools.TestPort;
|
|||||||
* @version 1.0
|
* @version 1.0
|
||||||
*/
|
*/
|
||||||
public class ServerP2P {
|
public class ServerP2P {
|
||||||
private int portServer;
|
|
||||||
private Directories directories;
|
private Directories directories;
|
||||||
static private final String subdir = "seeded/";
|
static private final String subdir = "seeded/";
|
||||||
private Logger logger;
|
private Logger logger;
|
||||||
private HostItem tracker;
|
private HostItem tracker;
|
||||||
|
private HostItem server;
|
||||||
|
|
||||||
/** Constructor with portServerstr containing a port number.
|
/** Constructor with portServerstr containing a port number.
|
||||||
* @param portServerstr String containing port number of listening.
|
* @param hostnameServer binded hostname
|
||||||
|
* @param portServer binded port
|
||||||
|
* @param hostnameTracker tracker hostname
|
||||||
|
* @param portTracker tracker port
|
||||||
*/
|
*/
|
||||||
public ServerP2P(String portServerstr, String hostnameTracker, String portTracker) {
|
public ServerP2P(String hostnameServer, int portServer, String hostnameTracker, int portTracker) {
|
||||||
Scanner scanner = new Scanner(System.in);
|
Scanner scanner = new Scanner(System.in);
|
||||||
portServer = Integer.valueOf(Integer.parseInt(portServerstr));
|
server = new HostItem(hostnameServer, portServer);
|
||||||
tracker = new HostItem(hostnameTracker, Integer.valueOf(Integer.parseInt(portTracker)));
|
tracker = new HostItem(hostnameTracker, portTracker);
|
||||||
directories = new Directories("P2P_JAVA_PROJECT_SERVER_" + portServer);
|
directories = new Directories("P2P_JAVA_PROJECT_SERVER_" + portServer);
|
||||||
directories.createSubdir(subdir);
|
directories.createSubdir(subdir);
|
||||||
logger = new Logger(directories.getDataHomeDirectory() + "server.log");
|
logger = new Logger(directories.getDataHomeDirectory() + "server.log");
|
||||||
@ -46,81 +49,80 @@ public class ServerP2P {
|
|||||||
*/
|
*/
|
||||||
public static void main(String [] args) {
|
public static void main(String [] args) {
|
||||||
final String defaultHostname = "localhost";
|
final String defaultHostname = "localhost";
|
||||||
final String defaultPortServer = "7070";
|
final ServerPortRange serverPortRange = new ServerPortRange();
|
||||||
final String defaultPortTracker = "6969";
|
final TrackerPortRange trackerPortRange = new TrackerPortRange();
|
||||||
String hostnameServer = "";
|
String hostnameServer = "";
|
||||||
String portServer = "";
|
int portServer = 0;
|
||||||
String hostnameTracker = "";
|
String hostnameTracker = "";
|
||||||
String portTracker = "";
|
int portTracker = 0;
|
||||||
Scanner scanner = new Scanner(System.in);
|
Scanner scanner = new Scanner(System.in);
|
||||||
TestPort testPort = new TestPort();
|
|
||||||
|
|
||||||
if ((args.length != 5) && (args.length != 0)){
|
if ((args.length != 5) && (args.length != 0)){
|
||||||
System.out.println("usage : java serveurP2P.ServeurP2P (interactive) or java serveurP2P.ServeurP2P -- <serveurHOSTNAME> <serveurPORT> <trackerHOSTNAME> <trackerPORT> (default server port: server 7070 (range 7000->7070) and tracker port 6969 (range 7000 -> 7999))");
|
System.out.println("usage : java serveurP2P.ServeurP2P (interactive) or java serveurP2P.ServeurP2P -- <serveurHOSTNAME> <serveurPORT> <trackerHOSTNAME> <trackerPORT> (" + serverPortRange + " and " + trackerPortRange +")");
|
||||||
|
System.exit(1);
|
||||||
}
|
}
|
||||||
else{
|
else if(args.length == 5){
|
||||||
if(args.length == 5){
|
|
||||||
hostnameServer = args[1];
|
hostnameServer = args[1];
|
||||||
portServer = args[2];
|
portServer = Integer.valueOf(Integer.parseInt(args[2]));
|
||||||
hostnameTracker = args[3];
|
hostnameTracker = args[3];
|
||||||
portTracker = args[4];
|
portTracker = Integer.valueOf(Integer.parseInt(args[4]));
|
||||||
|
} else {
|
||||||
|
System.out.println("Server, enter hostname to bind (default = localhost): ");
|
||||||
|
hostnameServer = scanner.nextLine();
|
||||||
|
if(hostnameServer.equals("")){
|
||||||
|
hostnameServer = defaultHostname;
|
||||||
|
System.out.println("using default hostname : " + hostnameServer);
|
||||||
}
|
}
|
||||||
else{
|
System.out.println("enter port (default = " + serverPortRange.getDefaultPort() + "): ");
|
||||||
System.out.println("Server, enter hostname to bind (default = localhost): ");
|
String portServerStr = scanner.nextLine();
|
||||||
hostnameServer = scanner.nextLine();
|
if(portServerStr.equals("")){
|
||||||
if(hostnameServer.equals("")){
|
portServer = serverPortRange.getDefaultPort();
|
||||||
hostnameServer = defaultHostname;
|
System.out.println("using default port : " + portServer);
|
||||||
System.out.println("using default hostname : " + hostnameServer);
|
} else {
|
||||||
}
|
portServer = Integer.valueOf(Integer.parseInt(portServerStr));
|
||||||
System.out.println("enter port (default = 7070): ");
|
|
||||||
portServer = scanner.nextLine();
|
|
||||||
if(portServer.equals("")){
|
|
||||||
portServer = defaultPortServer;
|
|
||||||
System.out.println("using default port : " + portServer);
|
|
||||||
}
|
|
||||||
System.out.println("enter hostname of tracker (default = localhost): ");
|
|
||||||
hostnameTracker = scanner.nextLine();
|
|
||||||
if(hostnameTracker.equals("")){
|
|
||||||
hostnameTracker = defaultHostname;
|
|
||||||
System.out.println("tracker default hostname : " + hostnameTracker);
|
|
||||||
}
|
|
||||||
System.out.println("enter tracker's port (default = 6969): ");
|
|
||||||
portTracker = scanner.nextLine();
|
|
||||||
if(portTracker.equals("")){
|
|
||||||
portTracker = defaultPortTracker;
|
|
||||||
System.out.println("using default port : " + portTracker);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
System.out.println("enter hostname of tracker (default = localhost): ");
|
||||||
System.out.println("using hostname : " + hostnameServer);
|
hostnameTracker = scanner.nextLine();
|
||||||
Pair<Integer, String> PtestPortServer = testPort.testPortServer(Integer.parseInt(portServer));
|
if(hostnameTracker.equals("")){
|
||||||
if(PtestPortServer.getKey() == 0){
|
hostnameTracker = defaultHostname;
|
||||||
System.out.println("using port : " + portServer);
|
System.out.println("tracker default hostname : " + hostnameTracker);
|
||||||
}
|
}
|
||||||
else {
|
System.out.println("enter tracker's port (default = " + trackerPortRange.getDefaultPort() + "): ");
|
||||||
System.out.println(PtestPortServer.getValue());
|
String portTrackerStr = scanner.nextLine();
|
||||||
portServer = defaultPortServer;
|
if(portTrackerStr.equals("")){
|
||||||
|
portTracker = serverPortRange.getDefaultPort();
|
||||||
|
System.out.println("using default port : " + portTracker);
|
||||||
|
} else {
|
||||||
|
portTracker = Integer.valueOf(Integer.parseInt(portTrackerStr));
|
||||||
}
|
}
|
||||||
System.out.println("tracker hostname : " + hostnameTracker);
|
|
||||||
|
|
||||||
Pair<Integer, String> PtestPortTracker = testPort.testPortTracker(Integer.parseInt(portTracker));
|
|
||||||
if(PtestPortTracker.getKey() == 0){
|
|
||||||
System.out.println("using port : " + portTracker);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
System.out.println(PtestPortTracker.getValue());
|
|
||||||
portTracker = defaultPortTracker;
|
|
||||||
}
|
|
||||||
|
|
||||||
ServerP2P s = new ServerP2P(portServer, hostnameTracker, portTracker);
|
|
||||||
ServerManagementUDP smudp = new ServerManagementUDP(s.directories.getDataHomeDirectory() + subdir, hostnameServer, s.portServer, s.logger, s.tracker);
|
|
||||||
ServerManagementTCP smtcp = new ServerManagementTCP(s.directories.getDataHomeDirectory() + subdir, hostnameServer, s.portServer, s.logger, s.tracker);
|
|
||||||
Thread tudp = new Thread(smudp);
|
|
||||||
tudp.setName("server UDP P2P-JAVA-PROJECT");
|
|
||||||
tudp.start();
|
|
||||||
Thread ttcp = new Thread(smtcp);
|
|
||||||
ttcp.setName("server TCP P2P-JAVA-PROJECT");
|
|
||||||
ttcp.start();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
System.out.println("using hostname : " + hostnameServer);
|
||||||
|
if(serverPortRange.isPortInRange(portServer)) {
|
||||||
|
System.out.println("using port : " + portServer);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
System.out.println("Port not in range. " + serverPortRange);
|
||||||
|
portServer = serverPortRange.getDefaultPort();
|
||||||
|
}
|
||||||
|
System.out.println("tracker hostname : " + hostnameTracker);
|
||||||
|
|
||||||
|
if(trackerPortRange.isPortInRange(portTracker)) {
|
||||||
|
System.out.println("using port : " + portTracker);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
System.out.println("Port not in range. " + trackerPortRange);
|
||||||
|
portTracker = trackerPortRange.getDefaultPort();
|
||||||
|
}
|
||||||
|
|
||||||
|
ServerP2P s = new ServerP2P(hostnameServer, portServer, hostnameTracker, portTracker);
|
||||||
|
ServerManagementUDP smudp = new ServerManagementUDP(s.directories.getDataHomeDirectory() + subdir, s.server, s.tracker, s.logger);
|
||||||
|
ServerManagementTCP smtcp = new ServerManagementTCP(s.directories.getDataHomeDirectory() + subdir, s.server, s.tracker, s.logger);
|
||||||
|
Thread tudp = new Thread(smudp);
|
||||||
|
tudp.setName("server UDP P2P-JAVA-PROJECT");
|
||||||
|
tudp.start();
|
||||||
|
Thread ttcp = new Thread(smtcp);
|
||||||
|
ttcp.setName("server TCP P2P-JAVA-PROJECT");
|
||||||
|
ttcp.start();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
49
src/tools/PortRange.java
Normal file
49
src/tools/PortRange.java
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
package tools;
|
||||||
|
|
||||||
|
/** Test ports.
|
||||||
|
* @author Louis Royer
|
||||||
|
* @author Flavien Haas
|
||||||
|
* @author JS Auge
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
public class PortRange {
|
||||||
|
|
||||||
|
protected int portMax;
|
||||||
|
protected int portMin;
|
||||||
|
protected int defaultPort;
|
||||||
|
protected String type;
|
||||||
|
|
||||||
|
/** Port range constructor
|
||||||
|
* @param portMin minimum port
|
||||||
|
* @param portMax maximum port
|
||||||
|
* @param defaultPort default port
|
||||||
|
* @param type type of range
|
||||||
|
*/
|
||||||
|
public PortRange(int portMin, int portMax, int defaultPort, String type) {
|
||||||
|
this.portMax = portMax;
|
||||||
|
this.portMin = portMin;
|
||||||
|
this.defaultPort = defaultPort;
|
||||||
|
this.type = type;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** test if port given correspond a range : registered ports, can be used without superuser privileges
|
||||||
|
* @return true if port was valid
|
||||||
|
*/
|
||||||
|
public boolean isPortInRange(int port) {
|
||||||
|
return ((port >= portMin) && (port <= portMax));
|
||||||
|
}
|
||||||
|
|
||||||
|
/** To String
|
||||||
|
* @return String representation
|
||||||
|
*/
|
||||||
|
public String toString() {
|
||||||
|
return "default " + type + "port: " + defaultPort + "(range: " + portMin + " -> " + portMax + ")";
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Default port getter
|
||||||
|
* @return default port
|
||||||
|
*/
|
||||||
|
public int getDefaultPort() {
|
||||||
|
return defaultPort;
|
||||||
|
}
|
||||||
|
}
|
10
src/tools/ServerPortRange.java
Normal file
10
src/tools/ServerPortRange.java
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
package tools;
|
||||||
|
import tools.PortRange;
|
||||||
|
|
||||||
|
public class ServerPortRange extends PortRange {
|
||||||
|
|
||||||
|
/** Constructor */
|
||||||
|
public ServerPortRange() {
|
||||||
|
super(7000, 7999, 7070, "server");
|
||||||
|
}
|
||||||
|
}
|
@ -1,35 +0,0 @@
|
|||||||
package tools;
|
|
||||||
|
|
||||||
import javafx.util.Pair;
|
|
||||||
|
|
||||||
/** Test ports.
|
|
||||||
* @author Louis Royer
|
|
||||||
* @author Flavien Haas
|
|
||||||
* @author JS Auge
|
|
||||||
* @version 1.0
|
|
||||||
*/
|
|
||||||
public class TestPort {
|
|
||||||
|
|
||||||
/** test if port given correspond a range : registered ports, can be used without superuser privileges
|
|
||||||
* @return Pair<Integer,String>
|
|
||||||
*/
|
|
||||||
public Pair<Integer,String> testPortServer(int port) {
|
|
||||||
if((port >= 7000) && (port <= 7999)){
|
|
||||||
return new Pair<>(0,"");
|
|
||||||
}
|
|
||||||
return new Pair<>(1, "Wrong port (7000 -> 7999), using default port 7070");
|
|
||||||
}
|
|
||||||
|
|
||||||
/** test if port given correspond a range : : registered ports, can be used without superuser privileges, 6969 correspond to the unofficial bittorent tracker
|
|
||||||
* @return Pair<Integer,String>
|
|
||||||
*/
|
|
||||||
public Pair<Integer,String> testPortTracker(int port) {
|
|
||||||
if((port >= 6000) && (port <= 6999)){
|
|
||||||
return new Pair<>(0,"");
|
|
||||||
}
|
|
||||||
return new Pair<>(1, "Wrong port (6000 -> 6999), using default port 6969");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
10
src/tools/TrackerPortRange.java
Normal file
10
src/tools/TrackerPortRange.java
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
package tools;
|
||||||
|
import tools.PortRange;
|
||||||
|
|
||||||
|
public class TrackerPortRange extends PortRange {
|
||||||
|
|
||||||
|
/** Constructor */
|
||||||
|
public TrackerPortRange() {
|
||||||
|
super(6000, 6999, 6969, "tracker");
|
||||||
|
}
|
||||||
|
}
|
@ -1,13 +1,13 @@
|
|||||||
package tracker;
|
package tracker;
|
||||||
|
|
||||||
import java.util.Scanner;
|
import java.util.Scanner;
|
||||||
import javafx.util.Pair;
|
|
||||||
import tracker.TrackerManagementTCP;
|
import tracker.TrackerManagementTCP;
|
||||||
import tracker.TrackerManagementUDP;
|
import tracker.TrackerManagementUDP;
|
||||||
import tools.Directories;
|
import tools.Directories;
|
||||||
import tools.Logger;
|
import tools.Logger;
|
||||||
import tools.LogLevel;
|
import tools.LogLevel;
|
||||||
import tools.TestPort;
|
import tools.TrackerPortRange;
|
||||||
|
import tools.HostItem;
|
||||||
|
|
||||||
/** Tracker implementation
|
/** Tracker implementation
|
||||||
* First argument of main method is port listened by the tracker, and is mandatory.
|
* First argument of main method is port listened by the tracker, and is mandatory.
|
||||||
@ -17,23 +17,22 @@ import tools.TestPort;
|
|||||||
* @version 1.0
|
* @version 1.0
|
||||||
*/
|
*/
|
||||||
public class Tracker {
|
public class Tracker {
|
||||||
private int port;
|
private HostItem tracker;
|
||||||
private Directories directories;
|
private Directories directories;
|
||||||
private Logger logger;
|
private Logger logger;
|
||||||
|
|
||||||
/** Constructor with portStr containing a port number.
|
/** Constructor with portStr containing a port number.
|
||||||
* @param portStr String containing port number of listening.
|
* @param hostname hostname to bind
|
||||||
|
* @param port port to bind
|
||||||
*/
|
*/
|
||||||
public Tracker(String portStr) {
|
public Tracker(String hostname, int port) {
|
||||||
port = Integer.valueOf(Integer.parseInt(portStr));
|
tracker = new HostItem(hostname, port);
|
||||||
directories = new Directories("P2P_JAVA_PROJECT_TRACKER_" + port);
|
directories = new Directories("P2P_JAVA_PROJECT_TRACKER_" + port);
|
||||||
logger = new Logger(directories.getDataHomeDirectory() + "tracker.log");
|
logger = new Logger(directories.getDataHomeDirectory() + "tracker.log");
|
||||||
System.out.println("Tracker will listen on port " + port + " and write logs into " + directories.getDataHomeDirectory());
|
System.out.println("Tracker will listen on port " + port + " and write logs into " + directories.getDataHomeDirectory());
|
||||||
Scanner scanner = new Scanner(System.in);
|
Scanner scanner = new Scanner(System.in);
|
||||||
directories.askOpenDataHomeDirectory(null, scanner);
|
directories.askOpenDataHomeDirectory(null, scanner);
|
||||||
scanner.close();
|
scanner.close();
|
||||||
|
|
||||||
//t.logger.write(PtestPortTracker.getValue(), LogLevel.Warning);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Main program entry point
|
/** Main program entry point
|
||||||
@ -41,57 +40,54 @@ public class Tracker {
|
|||||||
* to test, run with: java serverP2P.ServerP2P
|
* to test, run with: java serverP2P.ServerP2P
|
||||||
* @param args parameters
|
* @param args parameters
|
||||||
*/
|
*/
|
||||||
public static void main(String [] args) {
|
public static void main(String [] args) {
|
||||||
final String defaultPort = "6969";
|
final TrackerPortRange trackerPortRange = new TrackerPortRange();
|
||||||
final String defaultHostname = "localhost";
|
final String defaultHostname = "localhost";
|
||||||
Scanner scanner = new Scanner(System.in);
|
Scanner scanner = new Scanner(System.in);
|
||||||
TestPort testPort = new TestPort();
|
String hostname = "";
|
||||||
String hostname;
|
int port = 0;
|
||||||
String port;
|
Tracker t;
|
||||||
Tracker t;
|
|
||||||
|
|
||||||
if ((args.length != 3) && (args.length != 0)){
|
if ((args.length != 3) && (args.length != 0)){
|
||||||
System.out.println("usage : java tracker.Tracker (interactive) or java trackerP2P.trackerP2P -- <hostname> <PORT> (default port 6969 (range 6000 -> 6999))");
|
System.out.println("usage : java tracker.Tracker (interactive) or java trackerP2P.trackerP2P -- <hostname> <PORT> (" + trackerPortRange +")");
|
||||||
|
System.exit(1);
|
||||||
|
} else if (args.length == 3){
|
||||||
|
hostname = args[1];
|
||||||
|
port = Integer.valueOf(Integer.parseInt(args[2]));
|
||||||
|
} else {
|
||||||
|
System.out.println("Tracker Server, enter hostname to bind (default = localhost): ");
|
||||||
|
hostname = scanner.nextLine();
|
||||||
|
if(hostname.equals("")){
|
||||||
|
hostname = defaultHostname;
|
||||||
|
System.out.println("using default hostname : " + hostname);
|
||||||
}
|
}
|
||||||
else{
|
System.out.println("enter port (default = " + trackerPortRange.getDefaultPort() +"): ");
|
||||||
if(args.length == 3){
|
String portStr = scanner.nextLine();
|
||||||
hostname = args[1];
|
if(portStr.equals("")){
|
||||||
port = args[2];
|
port = trackerPortRange.getDefaultPort();
|
||||||
}
|
System.out.println("using default port : " + port);
|
||||||
else{
|
} else {
|
||||||
System.out.println("Tracker Server, enter hostname to bind (default = localhost): ");
|
port = Integer.valueOf(Integer.parseInt(portStr));
|
||||||
hostname = scanner.nextLine();
|
|
||||||
if(hostname.equals("")){
|
|
||||||
hostname = defaultHostname;
|
|
||||||
System.out.println("using default hostname : " + hostname);
|
|
||||||
}
|
|
||||||
System.out.println("enter port (default = 6969): ");
|
|
||||||
port = scanner.nextLine();
|
|
||||||
if(port.equals("")){
|
|
||||||
port = defaultPort;
|
|
||||||
System.out.println("using default port : " + port);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
System.out.println("using hostname : " + hostname);
|
|
||||||
Pair<Integer, String> PtestPortTracker = testPort.testPortTracker(Integer.parseInt(port));
|
|
||||||
if(PtestPortTracker.getKey() == 0){
|
|
||||||
System.out.println("using port : " + port);
|
|
||||||
t = new Tracker(port);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
System.out.println(PtestPortTracker.getValue());
|
|
||||||
t = new Tracker(defaultPort);
|
|
||||||
}
|
|
||||||
|
|
||||||
TrackerManagementUDP tmudp = new TrackerManagementUDP(hostname, t.port, t.logger);
|
|
||||||
TrackerManagementTCP tmtcp = new TrackerManagementTCP(hostname, t.port, t.logger);
|
|
||||||
Thread tudp = new Thread(tmudp);
|
|
||||||
tudp.setName("Tracker UDP P2P-JAVA-PROJECT");
|
|
||||||
tudp.start();
|
|
||||||
Thread ttcp = new Thread(tmtcp);
|
|
||||||
ttcp.setName("Tracker TCP P2P-JAVA-PROJECT");
|
|
||||||
ttcp.start();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
System.out.println("using hostname : " + hostname);
|
||||||
|
if(trackerPortRange.isPortInRange(port)) {
|
||||||
|
System.out.println("using port : " + port);
|
||||||
|
t = new Tracker(hostname, port);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
System.out.println("Port not in range. " + trackerPortRange);
|
||||||
|
t = new Tracker(hostname, trackerPortRange.getDefaultPort());
|
||||||
|
}
|
||||||
|
|
||||||
|
TrackerManagementUDP tmudp = new TrackerManagementUDP(t.tracker, t.logger);
|
||||||
|
TrackerManagementTCP tmtcp = new TrackerManagementTCP(t.tracker, t.logger);
|
||||||
|
Thread tudp = new Thread(tmudp);
|
||||||
|
tudp.setName("Tracker UDP P2P-JAVA-PROJECT");
|
||||||
|
tudp.start();
|
||||||
|
Thread ttcp = new Thread(tmtcp);
|
||||||
|
ttcp.setName("Tracker TCP P2P-JAVA-PROJECT");
|
||||||
|
ttcp.start();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -38,11 +38,11 @@ public class TrackerManagementTCP extends TrackerManagement {
|
|||||||
private ServerSocket socket;
|
private ServerSocket socket;
|
||||||
|
|
||||||
/** Constructor with port and logger.
|
/** Constructor with port and logger.
|
||||||
* @param port Port used to listen.
|
* @param tracker hostitem of the tracker.
|
||||||
* @param logger Logger object
|
* @param logger Logger object
|
||||||
*/
|
*/
|
||||||
public TrackerManagementTCP(String hostname, int port, Logger logger) {
|
public TrackerManagementTCP(HostItem tracker, Logger logger) {
|
||||||
super(new HostItem(hostname, port), logger);
|
super(tracker, logger);
|
||||||
try {
|
try {
|
||||||
socket = new ServerSocket(tracker.getPort(), 10, tracker.getInetAddress());
|
socket = new ServerSocket(tracker.getPort(), 10, tracker.getInetAddress());
|
||||||
} catch (SocketException e) {
|
} catch (SocketException e) {
|
||||||
|
@ -34,15 +34,15 @@ import tracker.TrackerManagement;
|
|||||||
public class TrackerManagementUDP extends TrackerManagement {
|
public class TrackerManagementUDP extends TrackerManagement {
|
||||||
private DatagramSocket socket;
|
private DatagramSocket socket;
|
||||||
/** Constructor with port and logger.
|
/** Constructor with port and logger.
|
||||||
* @param port Port used to listen.
|
* @param tracker hostitem of the tracker.
|
||||||
* @param logger Logger object
|
* @param logger Logger object
|
||||||
*/
|
*/
|
||||||
public TrackerManagementUDP(String hostname, int port, Logger logger) {
|
public TrackerManagementUDP(HostItem tracker, Logger logger) {
|
||||||
super(new HostItem(hostname, port), logger);
|
super(tracker, logger);
|
||||||
try {
|
try {
|
||||||
socket = new DatagramSocket(tracker.getPort(), tracker.getInetAddress());
|
socket = new DatagramSocket(tracker.getPort(), tracker.getInetAddress());
|
||||||
} catch (SocketException e) {
|
} catch (SocketException e) {
|
||||||
logger.writeUDP("Error: cannot listen on port " + port, LogLevel.Error);
|
logger.writeUDP("Error: cannot listen on " + tracker, LogLevel.Error);
|
||||||
System.exit(-1);
|
System.exit(-1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user