HostItems dans le server

This commit is contained in:
Louis Royer 2020-03-20 16:30:42 +01:00
parent cc06ccc334
commit 3387b90b14
6 changed files with 32 additions and 37 deletions

View File

@ -72,7 +72,6 @@ public class ClientP2P {
* @param args server listenning port
*/
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> ");
}
@ -85,8 +84,8 @@ public class ClientP2P {
}
// Server threads
ServerManagementUDP smudp = new ServerManagementUDP(c.directories.getDataHomeDirectory() + c.subdir, c.port, c.loggerServer, c.tracker);
ServerManagementTCP smtcp = new ServerManagementTCP(c.directories.getDataHomeDirectory() + c.subdir, c.port, c.loggerServer, c.tracker);
ServerManagementUDP smudp = new ServerManagementUDP(c.directories.getDataHomeDirectory() + c.subdir, "localhost", c.port, c.loggerServer, c.tracker);
ServerManagementTCP smtcp = new ServerManagementTCP(c.directories.getDataHomeDirectory() + c.subdir, "localhost", c.port, c.loggerServer, c.tracker);
Thread tudp = new Thread(smudp);
tudp.setName("server UDP P2P-JAVA-PROJECT (port: " + c.port + ")");
tudp.start();

View File

@ -47,26 +47,29 @@ public class ServerManagementTCP implements Runnable {
private String[] fileList;
private Map<String, byte[]> sha512 = new HashMap<>();
private String baseDirectory;
private int TCPPort;
private ServerSocket socket;
private Logger logger;
private HostItem tracker;
private HostItem server;
/** Constructor for TCP implementation, with baseDirectory and TCPPort parameters.
* @param baseDirectory the root directory where files are stored
* @param hostName the server will bind on this address
* @param TCPPort the server will listen on this port
* @param logger Logger item
* @param tracker Tracker
*/
public ServerManagementTCP(String baseDirectory, int TCPPort, Logger logger, HostItem tracker) {
public ServerManagementTCP(String baseDirectory, String hostName, int port, Logger logger, HostItem tracker) {
server = new HostItem(hostName, port);
this.tracker = tracker;
this.logger = logger;
this.baseDirectory = baseDirectory;
this.TCPPort = TCPPort;
initFileList();
initSha512();
try {
socket = new ServerSocket(TCPPort, 10, InetAddress.getLocalHost());
socket = new ServerSocket(server.getPort(), 10, server.getInetAddress());
} catch (SocketException e) {
logger.writeTCP("Error: cannot listen on port " + TCPPort, LogLevel.Error);
logger.writeTCP("Error: cannot listen on " + server, LogLevel.Error);
System.exit(-1);
} catch (IOException e) {
logger.writeTCP("Error: cannot openning socket", LogLevel.Error);
@ -93,14 +96,12 @@ public class ServerManagementTCP implements Runnable {
/** Private runnable class allowing to serve one client.
*/
private class ClientHandler implements Runnable {
private Socket s;
private String addr;
private HostItem addr;
/** Constructor with a socket.
* @param s Socket of this client
*/
public ClientHandler(Socket s) {
this.s = s;
this.addr = "[" +s.getInetAddress().getHostAddress() + "]:" + s.getPort() + " ";
addr = new HostItem(s);
}
/** Implementation of runnable. This method allow to serve one client.
@ -108,11 +109,11 @@ public class ServerManagementTCP implements Runnable {
public void run() {
boolean end = false;
logger.writeTCP(addr + "New connection", LogLevel.Action);
logger.writeTCP("[ " + addr + "] New connection", LogLevel.Action);
do {
end = handleRequest();
} while(!end);
logger.writeTCP(addr + "End of connection", LogLevel.Action);
logger.writeTCP("[ " + addr + "] End of connection", LogLevel.Action);
}
/** Respond to next request incomming on socket s.
@ -121,7 +122,7 @@ public class ServerManagementTCP implements Runnable {
*/
private boolean handleRequest() {
try {
ProtocolP2PPacketTCP pd = new ProtocolP2PPacketTCP((Object)s);
ProtocolP2PPacketTCP pd = new ProtocolP2PPacketTCP((Object)addr.getTCPSocket());
Payload p = pd.getPayload();
switch (p.getRequestResponseCode()) {
case LOAD_REQUEST:
@ -350,13 +351,12 @@ public class ServerManagementTCP implements Runnable {
* @throws SocketClosed
*/
private void registerTracker() throws InternalError, IOException, SocketClosed {
HostItem host = new HostItem(InetAddress.getLocalHost().getCanonicalHostName(), TCPPort);
logger.writeTCP("Unregistering from tracker", LogLevel.Info);
ProtocolP2PPacket p = (ProtocolP2PPacket)new ProtocolP2PPacketTCP((Payload)new Unregister(host));
ProtocolP2PPacket p = (ProtocolP2PPacket)new ProtocolP2PPacketTCP((Payload)new Unregister(server));
p.sendRequest((Object)tracker.getTCPSocket());
//tracker.closeTCPSocket();
logger.writeTCP("Registering into tracker", LogLevel.Info);
p = (ProtocolP2PPacket)new ProtocolP2PPacketTCP((Payload)new Register(host));
p = (ProtocolP2PPacket)new ProtocolP2PPacketTCP((Payload)new Register(server));
p.sendRequest((Object)tracker.getTCPSocket());
logger.writeTCP("Registering completed", LogLevel.Debug);
//tracker.closeTCPSocket();

View File

@ -46,30 +46,30 @@ public class ServerManagementUDP implements Runnable {
private String[] fileList;
private Map<String, byte[]> sha512 = new HashMap<>();
private String baseDirectory;
private int UDPPort;
private DatagramSocket socket;
private Logger logger;
private HostItem tracker;
private HostItem server;
/** Constructor for UDP implementation, with baseDirectory and UDPPort parameters.
* @param baseDirectory the root directory where files are stored
* @param UDPPort the server will listen on this port
* @param hostName the server will bind on this address
* @param port the server will listen on this port
* @param logger Logger item
* @param tracker Tracker
*/
public ServerManagementUDP(String baseDirectory, int UDPPort, Logger logger, HostItem tracker) {
public ServerManagementUDP(String baseDirectory, String hostName, int port, Logger logger, HostItem tracker) {
server = new HostItem(hostName, port);
this.logger = logger;
this.baseDirectory = baseDirectory;
this.UDPPort = UDPPort;
this.tracker = tracker;
initFileList();
initSha512();
try {
socket = new DatagramSocket(UDPPort, InetAddress.getLocalHost());
socket = new DatagramSocket(server.getPort(), server.getInetAddress());
} catch (SocketException e) {
logger.writeUDP("Error: cannot listen on port " + UDPPort, LogLevel.Error);
logger.writeUDP("Error: cannot listen on " + server, LogLevel.Error);
System.exit(-1);
} catch (UnknownHostException e) {
logger.writeUDP(e, LogLevel.Error);
System.exit(-2);
}
}
@ -291,12 +291,11 @@ public class ServerManagementUDP implements Runnable {
* @throws SocketClosed
*/
private void registerTracker() throws InternalError, IOException, SocketClosed {
HostItem host = new HostItem(InetAddress.getLocalHost().getCanonicalHostName(), UDPPort);
logger.writeUDP("Unregistering from tracker", LogLevel.Info);
ProtocolP2PPacket p = (ProtocolP2PPacket)new ProtocolP2PPacketUDP((Payload)new Unregister(host));
ProtocolP2PPacket p = (ProtocolP2PPacket)new ProtocolP2PPacketUDP((Payload)new Unregister(server));
p.sendRequest((Object)tracker.getUDPSocket());
logger.writeUDP("Registering into tracker", LogLevel.Info);
p = (ProtocolP2PPacket)new ProtocolP2PPacketUDP((Payload)new Register(host));
p = (ProtocolP2PPacket)new ProtocolP2PPacketUDP((Payload)new Register(server));
p.sendRequest((Object)tracker.getUDPSocket());
logger.writeUDP("Registering completed", LogLevel.Debug);
tracker.closeUDPSocket();

View File

@ -43,8 +43,8 @@ public class ServerP2P {
}
else{
ServerP2P s = new ServerP2P(args[1], args[2], args[3]);
ServerManagementUDP smudp = new ServerManagementUDP(s.directories.getDataHomeDirectory() + subdir, s.port, s.logger, s.tracker);
ServerManagementTCP smtcp = new ServerManagementTCP(s.directories.getDataHomeDirectory() + subdir, s.port, s.logger, s.tracker);
ServerManagementUDP smudp = new ServerManagementUDP(s.directories.getDataHomeDirectory() + subdir, "localhost", s.port, s.logger, s.tracker);
ServerManagementTCP smtcp = new ServerManagementTCP(s.directories.getDataHomeDirectory() + subdir, "localhost", s.port, s.logger, s.tracker);
Thread tudp = new Thread(smudp);
tudp.setName("server UDP P2P-JAVA-PROJECT");
tudp.start();
@ -53,5 +53,4 @@ public class ServerP2P {
ttcp.start();
}
}
}

View File

@ -77,7 +77,6 @@ public class TrackerManagementTCP implements Runnable {
/** Private runnable class allowing to serve one client.
*/
private class ClientHandler implements Runnable {
private Socket s;
private HostItem addr;
/** Constructor with a socket.
* @param s Socket of this client
@ -198,7 +197,8 @@ public class TrackerManagementTCP implements Runnable {
pLReq.sendRequest((Object)host.getTCPSocket());
logger.writeTCP("Received REGISTER from host " + pd.getHostItem() + ". Adding host " + host + " to list. Sending List request", LogLevel.Action);
handleListResponse((ProtocolP2PPacketTCP)pLReq.receiveResponse(), host);
//host.closeTCPSocket();
logger.writeTCP("Received LIST RESPONSE from host " + pd.getHostItem(), LogLevel.Action);
host.closeTCPSocket();
} catch (Exception e) {
// remove from list because list request could not be send
hostList.remove(host);
@ -254,7 +254,6 @@ public class TrackerManagementTCP implements Runnable {
* @throws InternalError
*/
private void handleListResponse(ProtocolP2PPacketTCP pd, HostItem host) throws InternalError {
logger.writeTCP("Received LIST RESPONSE from host " + host, LogLevel.Action);
Payload p = pd.getPayload();
assert p instanceof FileList: "payload must be an instance of FileList";
if (!(p instanceof FileList)) {

View File

@ -215,7 +215,6 @@ public class TrackerManagementUDP implements Runnable {
* @throws InternalError
*/
private void handleListResponse(ProtocolP2PPacketUDP pd, HostItem host) throws InternalError {
logger.writeUDP("Received LIST RESPONSE from host " + host, LogLevel.Action);
Payload p = pd.getPayload();
assert p instanceof FileList: "payload must be an instance of FileList";
if (!(p instanceof FileList)) {