added bugged interactions
This commit is contained in:
parent
1451b67a5b
commit
b87b3c70ef
137
src/gui/ClientP2Pgui.java
Normal file
137
src/gui/ClientP2Pgui.java
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
package gui;
|
||||||
|
|
||||||
|
import clientP2P.*;
|
||||||
|
import java.util.List;
|
||||||
|
import clientP2P.ClientManagementUDP;
|
||||||
|
import clientP2P.ClientManagementTCP;
|
||||||
|
import serverP2P.ServerManagementUDP;
|
||||||
|
import clientP2P.ClientInterfaceCLI;
|
||||||
|
import serverP2P.ServerManagementTCP;
|
||||||
|
import tools.Logger;
|
||||||
|
import tools.LogLevel;
|
||||||
|
import tools.Directories;
|
||||||
|
import tools.HostItem;
|
||||||
|
import tools.ServerPortRange;
|
||||||
|
import tools.TrackerPortRange;
|
||||||
|
|
||||||
|
/** Client + Server implementation.
|
||||||
|
* @author Louis Royer
|
||||||
|
* @author Flavien Haas
|
||||||
|
* @author JS Auge
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class ClientP2P {
|
||||||
|
private String logDir = "logs/";
|
||||||
|
private String partsDir = ".parts/";
|
||||||
|
private Logger loggerServer;
|
||||||
|
private Logger loggerClient;
|
||||||
|
private Directories directories;
|
||||||
|
private HostItem tracker;
|
||||||
|
private HostItem server;
|
||||||
|
final static boolean DEBUG = false;
|
||||||
|
private String hostnameServer;
|
||||||
|
private String hostnameTracker;
|
||||||
|
private int portServer;
|
||||||
|
private int portTracker;
|
||||||
|
private String protocolP2P;
|
||||||
|
|
||||||
|
/** Initialize loggers if directories and logger are null,
|
||||||
|
* else fail silently.
|
||||||
|
*/
|
||||||
|
public void initDirectoriesAndLoggers() {
|
||||||
|
if (directories == null && loggerServer == null && loggerClient == null) {
|
||||||
|
directories = new Directories("P2P_JAVA_PROJECT_" + server.getPort());
|
||||||
|
directories.createSubdir(logDir);
|
||||||
|
loggerServer = new Logger(directories.getDataHomeDirectory() + logDir + "server.log", DEBUG);
|
||||||
|
loggerClient = new Logger(directories.getDataHomeDirectory() + logDir + "client.log", DEBUG);
|
||||||
|
directories.createSubdir(partsDir);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Constructor.
|
||||||
|
* @param hostnameServer hostname to bind
|
||||||
|
* @param portServer port to bind
|
||||||
|
* @param hostnameTracker hostname of tracker
|
||||||
|
* @param portTracker port of tracker
|
||||||
|
*/
|
||||||
|
public ClientP2P(String hostnameServer, int portServer, String hostnameTracker, int portTracker, String protocolP2P) {
|
||||||
|
|
||||||
|
this.hostnameServer = hostnameServer;
|
||||||
|
this.hostnameTracker = hostnameTracker;
|
||||||
|
this.portServer = portServer;
|
||||||
|
this.portTracker = portTracker;
|
||||||
|
this.protocolP2P = protocolP2P;
|
||||||
|
|
||||||
|
final ServerPortRange serverPortRange = new ServerPortRange();
|
||||||
|
final TrackerPortRange trackerPortRange = new TrackerPortRange();
|
||||||
|
|
||||||
|
if (!serverPortRange.isPortInRange(portServer)){
|
||||||
|
ErrorFrame erreur = new ErrorFrame("SERVER: Port not in range. ");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!trackerPortRange.isPortInRange(portTracker)){
|
||||||
|
ErrorFrame erreur = new ErrorFrame("TRACKER: Port not in range");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
server = new HostItem(hostnameServer, portServer);
|
||||||
|
tracker = new HostItem(hostnameTracker, portTracker);
|
||||||
|
initDirectoriesAndLoggers();
|
||||||
|
System.out.println("Server will listen on port " + portServer + " and serve files from " + directories.getDataHomeDirectory());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void connect(){
|
||||||
|
|
||||||
|
System.out.println("using hostname : " + hostnameServer);
|
||||||
|
System.out.println("using port : " + portServer);
|
||||||
|
System.out.println("tracker hostname : " + hostnameTracker);
|
||||||
|
System.out.println("tracker port : " + portTracker);
|
||||||
|
ServerManagementUDP smudp = new ServerManagementUDP(directories.getDataHomeDirectory(), server, tracker, loggerServer);
|
||||||
|
ServerManagementTCP smtcp = new ServerManagementTCP(directories.getDataHomeDirectory(), server, tracker, 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(directories.getDataHomeDirectory(), tracker, directories.getDataHomeDirectory() + partsDir, loggerClient, server);
|
||||||
|
tclient = new Thread(new ClientInterfaceCLI(cmudp, loggerClient));
|
||||||
|
break;
|
||||||
|
case "TCP":
|
||||||
|
case "tcp":
|
||||||
|
case "1":
|
||||||
|
default:
|
||||||
|
System.out.println("Starting with TCP");
|
||||||
|
ClientManagementTCP cmtcp = new ClientManagementTCP(directories.getDataHomeDirectory(), tracker, directories.getDataHomeDirectory() + partsDir, loggerClient, server);
|
||||||
|
tclient = new Thread(new ClientInterfaceCLI(cmtcp, loggerClient));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
tclient.setName("client P2P-JAVA-PROJECT");
|
||||||
|
tclient.start();
|
||||||
|
try {
|
||||||
|
tclient.join();
|
||||||
|
} catch (InterruptedException e) {}
|
||||||
|
smudp.setStop();
|
||||||
|
smtcp.setStop();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
100
src/gui/ClientinterfaceGUI.java
Normal file
100
src/gui/ClientinterfaceGUI.java
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
package gui;
|
||||||
|
|
||||||
|
import clientP2P.*;
|
||||||
|
import clientP2P.ClientInterface;
|
||||||
|
import clientP2P.ClientManagement;
|
||||||
|
import tools.SearchFile;
|
||||||
|
import tools.LogLevel;
|
||||||
|
import tools.Logger;
|
||||||
|
import java.util.Scanner;
|
||||||
|
import localException.ProtocolError;
|
||||||
|
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;
|
||||||
|
import remoteException.NotFound;
|
||||||
|
import remoteException.ProtocolRemoteError;
|
||||||
|
import remoteException.VersionRemoteError;
|
||||||
|
import remoteException.NotATracker;
|
||||||
|
import remoteException.UnknownHost;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
import java.net.SocketException;
|
||||||
|
import javax.swing.JFrame;
|
||||||
|
|
||||||
|
/** Implementation of P2P-JAVA-PROJECT CLIENT interface for CLI
|
||||||
|
* @author Louis Royer
|
||||||
|
* @author Flavien Haas
|
||||||
|
* @author JS Auge
|
||||||
|
* @version 1.0
|
||||||
|
*/
|
||||||
|
public class ClientInterfaceCLI extends ClientInterface {
|
||||||
|
private Scanner scanner;
|
||||||
|
|
||||||
|
/** Constructor with clientManagement, logger and scanner.
|
||||||
|
* @param clientManagement ClientManagement used
|
||||||
|
* @param logger Logger used
|
||||||
|
* @param scanner Scanner used to read input
|
||||||
|
*/
|
||||||
|
public ClientInterfaceGUI(ClientManagement clientManagement, Logger logger, Scanner scanner) {
|
||||||
|
super(clientManagement, logger);
|
||||||
|
this.scanner = scanner;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Implementation of Runnable
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
public void run(){
|
||||||
|
boolean isRunning = initHostList();
|
||||||
|
if (isRunning) {
|
||||||
|
try {
|
||||||
|
int i = 1;
|
||||||
|
SearchFile searchEngine = new SearchFile();
|
||||||
|
int optionSearch = 0;
|
||||||
|
String searchInput = "";
|
||||||
|
String[] list = clientManagement.listDirectory();
|
||||||
|
//String[] resultArray = {};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
MainWindow win = new MainWindow();
|
||||||
|
win.add(new DownloadSelectionGen(list, clientManagement, logger, scanner));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** Initialization of hostList with retry in failure
|
||||||
|
* @return true if successfully initialized
|
||||||
|
*/
|
||||||
|
private boolean initHostList() {
|
||||||
|
boolean contacted = false;
|
||||||
|
boolean firstLoop = true;
|
||||||
|
boolean stop = false;
|
||||||
|
while (!contacted && !stop) {
|
||||||
|
try {
|
||||||
|
if (!firstLoop) {
|
||||||
|
writeLog("Cannot contact tracker. Try again [Y/n] ?", LogLevel.Error);
|
||||||
|
String tryAgain = scanner.nextLine();
|
||||||
|
if (tryAgain.equals("n") || tryAgain.equals("N")) {
|
||||||
|
stop = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
firstLoop = false;
|
||||||
|
clientManagement.initHostList();
|
||||||
|
contacted = true;
|
||||||
|
} catch (SocketException e) {
|
||||||
|
} catch (UnknownHostException e) {
|
||||||
|
} catch (IOException e) {
|
||||||
|
} catch (Exception e) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return !stop;
|
||||||
|
}
|
||||||
|
}
|
58
src/gui/DownloadFileGUI.java
Normal file
58
src/gui/DownloadFileGUI.java
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
package gui;
|
||||||
|
|
||||||
|
import clientP2P.*;
|
||||||
|
import clientP2P.ClientInterface;
|
||||||
|
import clientP2P.ClientManagement;
|
||||||
|
import tools.SearchFile;
|
||||||
|
import tools.LogLevel;
|
||||||
|
import tools.Logger;
|
||||||
|
import java.util.Scanner;
|
||||||
|
import localException.ProtocolError;
|
||||||
|
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;
|
||||||
|
import remoteException.NotFound;
|
||||||
|
import remoteException.ProtocolRemoteError;
|
||||||
|
import remoteException.VersionRemoteError;
|
||||||
|
import remoteException.NotATracker;
|
||||||
|
import remoteException.UnknownHost;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
import java.net.SocketException;
|
||||||
|
import javax.swing.JFrame;
|
||||||
|
|
||||||
|
public class DownloadFileGUI extends JPanel{
|
||||||
|
|
||||||
|
private String fileToDownload;
|
||||||
|
private ClientManagement clientManagement;
|
||||||
|
private Logger logger;
|
||||||
|
private Scanner scanner;
|
||||||
|
|
||||||
|
public DownloadFileGUI(String fileToDownload, ClientManagement clientManagement, Logger logger, Scanner scanner){
|
||||||
|
this.fileToDownload = fileToDownload;
|
||||||
|
this.clientManagement = clientManagement;
|
||||||
|
this.logger = logger;
|
||||||
|
this.scanner = scanner;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void download(){
|
||||||
|
try {
|
||||||
|
clientManagement.download(fileToDownload);
|
||||||
|
|
||||||
|
ErrorFrame erreur = new ErrorFrame("File " + f + " sucessfully downloaded");
|
||||||
|
} else {
|
||||||
|
|
||||||
|
ErrorFrame erreur = new ErrorFrame("File " + f + " unsucessfully downloaded, wrong number");
|
||||||
|
}
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
ErrorFrame erreur = new ErrorFrame("File " + f + " unsucessfully downloaded, wrong number"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -9,6 +9,10 @@ package gui;
|
|||||||
|
|
||||||
import javax.swing.JFrame;
|
import javax.swing.JFrame;
|
||||||
import javax.swing.SwingUtilities;
|
import javax.swing.SwingUtilities;
|
||||||
|
import clientP2P.*;
|
||||||
|
import tools.LogLevel;
|
||||||
|
import tools.Logger;
|
||||||
|
import java.util.Scanner;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Louis Royer
|
* @author Louis Royer
|
||||||
@ -25,13 +29,19 @@ public class DownloadSelectionGen extends javax.swing.JPanel {
|
|||||||
private javax.swing.JScrollPane jScrollPane1;
|
private javax.swing.JScrollPane jScrollPane1;
|
||||||
private static final long serialVersionUID = 13L;
|
private static final long serialVersionUID = 13L;
|
||||||
private String[] listFilesToDownload;
|
private String[] listFilesToDownload;
|
||||||
|
private ClientManagement clientManagement;
|
||||||
|
private Scanner scanner;
|
||||||
|
private Logger logger;
|
||||||
// End of variables declaration
|
// End of variables declaration
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates new form ArgumentsGen
|
* Creates new form ArgumentsGen
|
||||||
*/
|
*/
|
||||||
public DownloadSelectionGen(String[] listFilesToDownload) {
|
public DownloadSelectionGen(String[] listFilesToDownload, ClientManagement clientManagement, Logger logger, Scanner scanner) {
|
||||||
this.listFilesToDownload = listFilesToDownload;
|
this.listFilesToDownload = listFilesToDownload;
|
||||||
|
this.clientManagement = clientManagement;
|
||||||
|
this.logger = logger;
|
||||||
|
this.scanner = scanner;
|
||||||
initComponents();
|
initComponents();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -110,7 +120,9 @@ public class DownloadSelectionGen extends javax.swing.JPanel {
|
|||||||
}// </editor-fold>
|
}// </editor-fold>
|
||||||
|
|
||||||
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
|
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
// TODO add your handling code here:
|
String fileSelected = jList1.getSelectedValue();
|
||||||
|
DownloadFileGUI interface = new DownloadFileGUI(fileSelected, clientManagement, logger, scanner);
|
||||||
|
DownloadFileGUI.download();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
|
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {
|
||||||
|
@ -12,12 +12,10 @@ public class MainWindow extends JFrame{
|
|||||||
fenetre.setSize(550, 250);
|
fenetre.setSize(550, 250);
|
||||||
fenetre.setLocationRelativeTo(null);
|
fenetre.setLocationRelativeTo(null);
|
||||||
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
//fenetre.add(new Parameters());
|
fenetre.add(new ArgumentsGen());
|
||||||
//fenetre.add(new ArgumentsGen());
|
//String[] listTest = {"test", "test2", "test3", "test4", "test5", "test6", "test7", "fichier1",
|
||||||
String[] listTest = {"test", "test2", "test3", "test4", "test5", "test6", "test7", "fichier1",
|
// "fichier2", "fichier3", "fichier4"};
|
||||||
"fichier2", "fichier3", "fichier4"};
|
//fenetre.add(new DownloadSelectionGen(listTest));
|
||||||
//fenetre.add(new DownloadSelection(listTest));
|
|
||||||
fenetre.add(new DownloadSelectionGen(listTest));
|
|
||||||
fenetre.setVisible(true);
|
fenetre.setVisible(true);
|
||||||
ErrorFrame erreur = new ErrorFrame("ceci est une erreur");
|
ErrorFrame erreur = new ErrorFrame("ceci est une erreur");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user