mirror of
https://github.com/binlaab/nanofiles.git
synced 2026-07-01 18:16:29 +02:00
implementado quit, hay que cerrar los sockets TCP cuando terminen las cosas
This commit is contained in:
@@ -12,7 +12,7 @@ public class NanoFiles {
|
|||||||
* que combine los DNIs de ambos miembros del grupo de prácticas.
|
* que combine los DNIs de ambos miembros del grupo de prácticas.
|
||||||
*/
|
*/
|
||||||
public static final String PROTOCOL_ID = "123456789A";
|
public static final String PROTOCOL_ID = "123456789A";
|
||||||
private static final String DEFAULT_DIRECTORY_HOSTNAME = "192.168.126.1";
|
private static final String DEFAULT_DIRECTORY_HOSTNAME = "192.168.1.46";
|
||||||
public static String sharedDirname = DEFAULT_SHARED_DIRNAME;
|
public static String sharedDirname = DEFAULT_SHARED_DIRNAME;
|
||||||
public static FileDatabase db;
|
public static FileDatabase db;
|
||||||
/**
|
/**
|
||||||
@@ -54,6 +54,7 @@ public class NanoFiles {
|
|||||||
controller.processCommand();
|
controller.processCommand();
|
||||||
} while (controller.shouldQuit() == false);
|
} while (controller.shouldQuit() == false);
|
||||||
System.out.println("Bye.");
|
System.out.println("Bye.");
|
||||||
|
System.exit(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -285,15 +285,16 @@ public class NFControllerLogicP2P {
|
|||||||
/*
|
/*
|
||||||
* TODO: Enviar señal para detener nuestro servidor de ficheros en segundo plano
|
* TODO: Enviar señal para detener nuestro servidor de ficheros en segundo plano
|
||||||
*/
|
*/
|
||||||
|
if (fileServer != null) {
|
||||||
|
fileServer.stopServer();
|
||||||
|
fileServer = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean serving() {
|
protected boolean serving() {
|
||||||
boolean result = false;
|
boolean result = false;
|
||||||
|
|
||||||
|
if (fileServer != null) result = true;
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ public class NFServer implements Runnable {
|
|||||||
private NFServerState state = new NFServerState();
|
private NFServerState state = new NFServerState();
|
||||||
|
|
||||||
private ServerSocket serverSocket = null;
|
private ServerSocket serverSocket = null;
|
||||||
|
private volatile boolean stopServer = false; // gracias pcd
|
||||||
|
|
||||||
public ServerSocket getServerSocket() {
|
public ServerSocket getServerSocket() {
|
||||||
return serverSocket;
|
return serverSocket;
|
||||||
@@ -42,6 +43,17 @@ public class NFServer implements Runnable {
|
|||||||
serverSocket = new ServerSocket();
|
serverSocket = new ServerSocket();
|
||||||
serverSocket.bind(serverSocketAddress);
|
serverSocket.bind(serverSocketAddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void stopServer() {
|
||||||
|
// debería cerrar todos los sockets antes de irme
|
||||||
|
this.stopServer = true;
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (serverSocket != null && !serverSocket.isBound()) {
|
||||||
|
serverSocket.close();
|
||||||
|
}
|
||||||
|
} catch (IOException e) { e.printStackTrace(); }
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Método para ejecutar el servidor de ficheros en primer plano. Sólo es capaz
|
* Método para ejecutar el servidor de ficheros en primer plano. Sólo es capaz
|
||||||
@@ -121,7 +133,7 @@ public class NFServer implements Runnable {
|
|||||||
* @see java.lang.Runnable#run()
|
* @see java.lang.Runnable#run()
|
||||||
*/
|
*/
|
||||||
public void run() {
|
public void run() {
|
||||||
boolean stopServer = false; // HAY QUE CAMBIAR ESTO PORQUE NO SÉ DE DÓNDE COJONES SALE (ver TODO l. 147)
|
stopServer = false;
|
||||||
/*
|
/*
|
||||||
* TODO: (Boletín SocketsTCP) Usar el socket servidor para esperar conexiones de
|
* TODO: (Boletín SocketsTCP) Usar el socket servidor para esperar conexiones de
|
||||||
* otros peers que soliciten descargar ficheros
|
* otros peers que soliciten descargar ficheros
|
||||||
@@ -170,6 +182,7 @@ public class NFServer implements Runnable {
|
|||||||
* servidor en un hilo nuevo que se ejecutará en segundo plano 2) Detener el
|
* servidor en un hilo nuevo que se ejecutará en segundo plano 2) Detener el
|
||||||
* servidor (stopserver) 3) Obtener el puerto de escucha del servidor etc.
|
* servidor (stopserver) 3) Obtener el puerto de escucha del servidor etc.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ public class NFServerState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public List<Socket> getSockets() {
|
public List<Socket> getSockets() {
|
||||||
// tu puta madre va a hacer copias
|
|
||||||
return sockets;
|
return sockets;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -306,11 +306,6 @@ public class DirectoryConnector {
|
|||||||
String respStr = new String(response, 0, response.length);
|
String respStr = new String(response, 0, response.length);
|
||||||
DirMessage respServe = DirMessage.fromString(respStr);
|
DirMessage respServe = DirMessage.fromString(respStr);
|
||||||
success = respServe.getOperation().equals(DirMessageOps.OPERATION_SERVE_OK);
|
success = respServe.getOperation().equals(DirMessageOps.OPERATION_SERVE_OK);
|
||||||
|
|
||||||
if (success) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -405,9 +400,13 @@ public class DirectoryConnector {
|
|||||||
*/
|
*/
|
||||||
public boolean unregisterFileServer() {
|
public boolean unregisterFileServer() {
|
||||||
boolean success = false;
|
boolean success = false;
|
||||||
|
DirMessage unregisterServer = new DirMessage(DirMessageOps.OPERATION_STOP_SERVE, NanoFiles.peerNickname);
|
||||||
|
byte[] unregisterBytes = unregisterServer.toString().getBytes();
|
||||||
|
byte[] response = sendAndReceiveDatagrams(unregisterBytes);
|
||||||
|
String respStr = new String(response, 0, response.length);
|
||||||
|
DirMessage respUnregister = DirMessage.fromString(respStr);
|
||||||
|
success = respUnregister.getOperation().equals(DirMessageOps.OPERATION_STOP_SERVE_OK);
|
||||||
|
|
||||||
|
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,6 +75,11 @@ public class DirMessage {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public DirMessage(String op, String nick) {
|
||||||
|
this(op);
|
||||||
|
this.nick = nick;
|
||||||
|
}
|
||||||
|
|
||||||
public DirMessage(String op, FileInfo[] filelist) {
|
public DirMessage(String op, FileInfo[] filelist) {
|
||||||
this(op);
|
this(op);
|
||||||
this.fileList = filelist;
|
this.fileList = filelist;
|
||||||
@@ -275,6 +280,7 @@ public class DirMessage {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case DirMessageOps.OPERATION_SERVE:
|
case DirMessageOps.OPERATION_SERVE:
|
||||||
|
case DirMessageOps.OPERATION_STOP_SERVE:
|
||||||
sb.append(FIELDNAME_NICK + DELIMITER + this.nick + END_LINE);
|
sb.append(FIELDNAME_NICK + DELIMITER + this.nick + END_LINE);
|
||||||
sb.append(FIELDNAME_IP + DELIMITER + this.ip + END_LINE);
|
sb.append(FIELDNAME_IP + DELIMITER + this.ip + END_LINE);
|
||||||
sb.append(FIELDNAME_PORT + DELIMITER + this.port + END_LINE);
|
sb.append(FIELDNAME_PORT + DELIMITER + this.port + END_LINE);
|
||||||
|
|||||||
@@ -22,6 +22,10 @@ public class DirMessageOps {
|
|||||||
|
|
||||||
public static final String OPERATION_REQUEST_SERVER_PEERS = "peers";
|
public static final String OPERATION_REQUEST_SERVER_PEERS = "peers";
|
||||||
public static final String OPERATION_SERVER_PEERS = "serverPeers";
|
public static final String OPERATION_SERVER_PEERS = "serverPeers";
|
||||||
|
|
||||||
|
public static final String OPERATION_STOP_SERVE = "stopServe";
|
||||||
|
public static final String OPERATION_STOP_SERVE_OK = "stopServeOk";
|
||||||
|
public static final String OPERATION_STOP_SERVE_ERROR = "stopServeError";
|
||||||
// TODO: definir las operaciones del protocolo de directorio
|
// TODO: definir las operaciones del protocolo de directorio
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -267,6 +267,17 @@ public class NFDirectoryServer {
|
|||||||
msgToSend.setPeers(registeredPeers);
|
msgToSend.setPeers(registeredPeers);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case DirMessageOps.OPERATION_STOP_SERVE: {
|
||||||
|
System.out.println("stop_serve - tenemos el nick " + receivedMsg.getNick());
|
||||||
|
if (registeredPeers.get(receivedMsg.getNick()) != null) {
|
||||||
|
registeredPeers.remove(receivedMsg.getNick());
|
||||||
|
msgToSend = new DirMessage(DirMessageOps.OPERATION_STOP_SERVE_OK);
|
||||||
|
} else {
|
||||||
|
msgToSend = new DirMessage(DirMessageOps.OPERATION_STOP_SERVE_ERROR);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
System.err.println("Unexpected message operation: \"" + operation + "\"");
|
System.err.println("Unexpected message operation: \"" + operation + "\"");
|
||||||
|
|||||||
Reference in New Issue
Block a user