WIP: Aide tracker #63

Closed
louis_royer wants to merge 12 commits from clitracker into etape4
5 changed files with 80 additions and 26 deletions
Showing only changes of commit 3edb0bf9e5 - Show all commits

View File

@ -6,6 +6,12 @@ Lien vers le [document original](https://stri-online.net/FTLV/mod/resource/view.
**But** : le but de ce projet est de créer une application répartie en Java de téléchargement de fichier en mode P2P (peer to peer ou poste à poste).
Les étapes suivantes sont conseillées.
# Usage
tracker : java -ea tracker.Tracker, to specify port (default localhost:6969, range 6000 -> 6999): java -ea trackerP2P.trackerP2P -- <PORT>

-ea pas obligatoire

-ea pas obligatoire
serveur : java -ea serveurP2P.ServeurP2P, to specify port and tracker (default for server localhost:7070 tracker localhost:6969, range 7000 -> 7999): java -ea serveurP2P.ServeurP2P -- <serveurPORT> <trackerHOSTNAME> <trackerPORT>

-ea pas obligatoire

-ea pas obligatoire
client/serveur : java -ea clientP2P.ClientP2P -- <serverPORT> <trackerHOSTNAME> <trackerPORT>

-ea pas obligatoire

-ea pas obligatoire
## Étape 1 : Téléchargement à la FTP
La première étape doit permettre de télécharger un fichier en intégralité d'une machine vers une autre machine de façon similaire aux applications suivant le protocole FTP.
@ -47,4 +53,4 @@ Options :
- Permettre la recherche de fichiers à partir de leur nom ou de toute autre caractéristique. À l'issu de la recherche on devra pouvoir connaître un ensemble d'application possédant le fichier et commencer le téléchargement.
- Gérer le protocole d'une application de téléchargement P2P existante (bittorrent, emule ou autre).
Note : toute fonctionnalité supplémentaire ne sera prise en compte dans la notation que si toutes les étapes ont été correctement traitées.
Note : toute fonctionnalité supplémentaire ne sera prise en compte dans la notation que si toutes les étapes ont été correctement traitées.

View File

@ -73,7 +73,7 @@ public class ClientP2P {
*/
public static void main(String [] args) {
if (args[1].equals("help") || args[1].equals("-h") || args[1].equals("h")){
System.out.println("usage : java -ea clientP2P.ClientP2P -- <PORT> ");
System.out.println("usage : java -ea clientP2P.ClientP2P -- <serverPORT> <trackerHOSTNAME> <trackerPORT>");
}
else{
ClientP2P c;

27
src/tools/TestPort.java Normal file
View File

@ -0,0 +1,27 @@
package tools;
/** Test ports.
* @author Louis Royer
* @author Flavien Haas
* @author JS Auge
* @version 1.0
*/
public class TestPort {

missing javadoc

missing javadoc

missing javadoc

missing javadoc
public boolean testPortServer(int port) {

méthode static

méthode static
if((port > 7000) && (port < 7999)){

expliquer brièvement en commentaire le pourquoi du choix de cette plage de port (avec le lien vers wikipedia si besoin)

expliquer brièvement en commentaire le pourquoi du choix de cette plage de port (avec le lien vers wikipedia si besoin)
return true;

si tu change en
public static boolean testPortServer(…)
tu n’aura plus besoin de faire ton
TestPort testPort = new TestPort(); avant de l’utiliser (tu pourra l’utiliser avec TestPort.testPortServer(port, message) directement).
D’ailleurs, je pense que tu ne devrais pas passer la variable message, mais plutôt quelque chose du genre:

private static int portMinServer = 7000;
private static int portMaxServer = 7999;

public static String getRangeServer() {
	return portMinServer + " -> " + portMaxServer;
}

public static boolean isPortServerValid(int port) {
	if ((port >= portMinServer) && (port <= maxServer)) {
    	return true;
    } else {
    	return false;
    }
}

et idem pour le tracker.

si tu change en `public static boolean testPortServer(…)` tu n’aura plus besoin de faire ton `TestPort testPort = new TestPort();` avant de l’utiliser (tu pourra l’utiliser avec `TestPort.testPortServer(port, message)` directement). D’ailleurs, je pense que tu ne devrais pas passer la variable message, mais plutôt quelque chose du genre: ```java private static int portMinServer = 7000; private static int portMaxServer = 7999; public static String getRangeServer() { return portMinServer + " -> " + portMaxServer; } public static boolean isPortServerValid(int port) { if ((port >= portMinServer) && (port <= maxServer)) { return true; } else { return false; } } ``` et idem pour le tracker.
ping @flavien @js_auge
}
return false;
}
public boolean testPortTracker(int port) {

méthode static

méthode static
if((port > 6000) && (port < 6999)){

expliquer brièvement en commentaire le pourquoi du choix de cette plage de port (avec le lien vers wikipedia si besoin)

expliquer brièvement en commentaire le pourquoi du choix de cette plage de port (avec le lien vers wikipedia si besoin)
return true;
}
return false;
}
}

View File

@ -1,9 +1,12 @@
package tracker;
import java.util.Scanner;
import tracker.TrackerManagementTCP;
import tracker.TrackerManagementUDP;
import tools.Directories;
import tools.Logger;
import java.util.Scanner;
import tools.LogLevel;
import tools.TestPort;
/** Tracker implementation
* First argument of main method is port listened by the tracker, and is mandatory.
@ -16,6 +19,7 @@ public class Tracker {
private int port;
private Directories directories;
private Logger logger;
private static final int defaultPort = 6969;
/** Constructor with portStr containing a port number.
* @param portStr String containing port number of listening.
@ -36,15 +40,31 @@ public class Tracker {
* @param args parameters
*/
public static void main(String [] args) {
Tracker t = new Tracker(args[1]);
TrackerManagementUDP tmudp = new TrackerManagementUDP(t.port, t.logger);
TrackerManagementTCP tmtcp = new TrackerManagementTCP(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();
if (args[1].equals("help") || args[1].equals("-h") || args[1].equals("h")){
System.out.println("usage : java -ea trackerP2P.trackerP2P, to specify port (default 6969, range 6000 -> 6999): java -ea trackerP2P.trackerP2P -- <PORT>");

faire une méthode dans TestPort qui permet d’afficher la range, pour tout regrouper dans une seule classe (les extrémités de numéro de ports pourront être mis dans des variables static)

faire une méthode dans TestPort qui permet d’afficher la range, pour tout regrouper dans une seule classe (les extrémités de numéro de ports pourront être mis dans des variables static)
}
else{
Tracker t;
TestPort testPortTracker = new TestPort();
if(testPortTracker.testPortTracker(Integer.parseInt(args[1]))){
t = new Tracker(args[1]);
}
else {
System.out.println("Wrong port (6000 -> 6999), using default port 6969");

faire une méthode dans TestPort qui permet d’afficher la range, pour tout regrouper dans une seule classe (les extrémités de numéro de ports pourront être mis dans des variables static)

faire une méthode dans TestPort qui permet d’afficher la range, pour tout regrouper dans une seule classe (les extrémités de numéro de ports pourront être mis dans des variables static)
t = new Tracker(String.valueOf(defaultPort));

FIXME

FIXME
//t.logger.writeUDP("Wrong port (6000 -> 6999), using default port 6969", LogLevel.Warning);
//t.logger.writeTCP("Wrong port (6000 -> 6999), using default port 6969", LogLevel.Warning);
}
TrackerManagementUDP tmudp = new TrackerManagementUDP(t.port, t.logger);
TrackerManagementTCP tmtcp = new TrackerManagementTCP(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();
}
}
}

View File

@ -1,32 +1,32 @@
package tracker;
import tools.Logger;
import tools.LogLevel;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.HashMap;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.net.InetAddress;
import protocolP2P.ProtocolP2PPacketTCP;
import protocolP2P.ProtocolP2PPacket;
import protocolP2P.RequestResponseCode;
import protocolP2P.Payload;
import protocolP2P.Register;
import protocolP2P.Unregister;
import tools.HostItem;
import java.util.ArrayList;
import java.util.List;
import java.io.IOException;
import exception.LocalException;
import java.util.Map;
import java.util.HashMap;
import protocolP2P.DiscoverRequest;
import protocolP2P.DiscoverResponse;
import protocolP2P.FileList;
import localException.InternalError;
import exception.LocalException;
import remoteException.EmptyDirectory;
import java.net.UnknownHostException;
import java.net.InetAddress;
import localException.InternalError;
import localException.SocketClosed;
import tracker.TrackerManagement;
import tools.HostItem;
import tools.Logger;
import tools.LogLevel;
/** Tracker management implementation with tcp
* @author Louis Royer
@ -114,6 +114,7 @@ public class TrackerManagementTCP extends TrackerManagement {
}
}
/** Implementation of writeLog
* @param text Text to log
* @param logLevel level of logging
@ -144,7 +145,7 @@ public class TrackerManagementTCP extends TrackerManagement {
protected Object getHostItemSocket(HostItem hostItem) {
return (Object)hostItem.getTCPSocket();
}
/** Close HostItem socket
* @param hostItem HostItem
*/