Projet_JAVA_P2P_STRI2A/src/tracker/Tracker.java
Louis Royer 039c3ff2b0
All checks were successful
flavien's git/Projet_JAVA_P2P_STRI2A/pipeline/head This commit looks good
Fix #17 (#104)
Fix #17
2020-04-02 15:58:10 +02:00

98 lines
3.3 KiB
Java

package tracker;
import java.util.Scanner;
import tracker.TrackerManagementTCP;
import tracker.TrackerManagementUDP;
import tools.Directories;
import tools.Logger;
import tools.LogLevel;
import tools.TrackerPortRange;
import tools.HostItem;
/** Tracker implementation
* First argument of main method is port listened by the tracker, and is mandatory.
* @author Louis Royer
* @author Flavien Haas
* @author JS Auge
* @version 1.0
*/
public class Tracker {
private HostItem tracker;
private Directories directories;
private Logger logger;
final static boolean DEBUG = true;
/** Constructor with portStr containing a port number.
* @param hostname hostname to bind
* @param port port to bind
* @param isInteractive true if application is in interactive mode
*/
public Tracker(String hostname, int port, boolean isInteractive) {
tracker = new HostItem(hostname, port);
directories = new Directories("P2P_JAVA_PROJECT_TRACKER_" + port);
logger = new Logger(directories.getDataHomeDirectory() + "tracker.log", DEBUG);
System.out.println("Tracker will listen on port " + port + " and write logs into " + directories.getDataHomeDirectory());
Scanner scanner = new Scanner(System.in);
if (isInteractive) {
directories.askOpenDataHomeDirectory(null, scanner);
}
scanner.close();
}
/** Main program entry point
* first parameter is port number and is mandatory
* to test, run with: java serverP2P.ServerP2P
* @param args parameters
*/
public static void main(String [] args) {
final TrackerPortRange trackerPortRange = new TrackerPortRange();
final String defaultHostname = "localhost";
Scanner scanner = new Scanner(System.in);
String hostname = "";
int port = 0;
Tracker t;
boolean isInteractive = false;
if ((args.length != 3) && (args.length != 0)) {
System.out.println("usage : java tracker.Tracker (interactive) or java trackerP2P.trackerP2P -- <hostname> <PORT> (" + trackerPortRange +")");
System.exit(1);
} else if (args.length == 3) {
isInteractive = false;
hostname = args[1];
port = Integer.valueOf(Integer.parseInt(args[2]));
} else {
isInteractive = true;
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);
}
System.out.println("enter port (default = " + trackerPortRange.getDefaultPort() +"): ");
String portStr = scanner.nextLine();
if (portStr.equals("")) {
port = trackerPortRange.getDefaultPort();
System.out.println("using default port : " + port);
} else {
port = Integer.valueOf(Integer.parseInt(portStr));
}
}
System.out.println("using hostname : " + hostname);
if (trackerPortRange.isPortInRange(port)) {
System.out.println("using port : " + port);
t = new Tracker(hostname, port, isInteractive);
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();
} else {
System.out.println("Port not in range. " + trackerPortRange);
System.exit(2);
}
}
}