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.
|
||||
*/
|
||||
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 FileDatabase db;
|
||||
/**
|
||||
@@ -54,6 +54,7 @@ public class NanoFiles {
|
||||
controller.processCommand();
|
||||
} while (controller.shouldQuit() == false);
|
||||
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
|
||||
*/
|
||||
|
||||
|
||||
|
||||
if (fileServer != null) {
|
||||
fileServer.stopServer();
|
||||
fileServer = null;
|
||||
}
|
||||
}
|
||||
|
||||
protected boolean serving() {
|
||||
boolean result = false;
|
||||
|
||||
|
||||
if (fileServer != null) result = true;
|
||||
|
||||
return result;
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@ public class NFServer implements Runnable {
|
||||
private NFServerState state = new NFServerState();
|
||||
|
||||
private ServerSocket serverSocket = null;
|
||||
private volatile boolean stopServer = false; // gracias pcd
|
||||
|
||||
public ServerSocket getServerSocket() {
|
||||
return serverSocket;
|
||||
@@ -43,6 +44,17 @@ public class NFServer implements Runnable {
|
||||
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
|
||||
* de atender una conexión de un cliente. Una vez se lanza, ya no es posible
|
||||
@@ -121,7 +133,7 @@ public class NFServer implements Runnable {
|
||||
* @see java.lang.Runnable#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
|
||||
* otros peers que soliciten descargar ficheros
|
||||
@@ -174,6 +186,7 @@ public class NFServer implements Runnable {
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Método de clase que implementa el extremo del servidor del protocolo de
|
||||
* transferencia de ficheros entre pares.
|
||||
|
||||
@@ -18,7 +18,6 @@ public class NFServerState {
|
||||
}
|
||||
|
||||
public List<Socket> getSockets() {
|
||||
// tu puta madre va a hacer copias
|
||||
return sockets;
|
||||
}
|
||||
|
||||
|
||||
@@ -306,11 +306,6 @@ public class DirectoryConnector {
|
||||
String respStr = new String(response, 0, response.length);
|
||||
DirMessage respServe = DirMessage.fromString(respStr);
|
||||
success = respServe.getOperation().equals(DirMessageOps.OPERATION_SERVE_OK);
|
||||
|
||||
if (success) {
|
||||
|
||||
}
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
@@ -405,8 +400,12 @@ public class DirectoryConnector {
|
||||
*/
|
||||
public boolean unregisterFileServer() {
|
||||
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;
|
||||
|
||||
@@ -75,6 +75,11 @@ public class DirMessage {
|
||||
|
||||
}
|
||||
|
||||
public DirMessage(String op, String nick) {
|
||||
this(op);
|
||||
this.nick = nick;
|
||||
}
|
||||
|
||||
public DirMessage(String op, FileInfo[] filelist) {
|
||||
this(op);
|
||||
this.fileList = filelist;
|
||||
@@ -275,6 +280,7 @@ public class DirMessage {
|
||||
break;
|
||||
|
||||
case DirMessageOps.OPERATION_SERVE:
|
||||
case DirMessageOps.OPERATION_STOP_SERVE:
|
||||
sb.append(FIELDNAME_NICK + DELIMITER + this.nick + END_LINE);
|
||||
sb.append(FIELDNAME_IP + DELIMITER + this.ip + 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_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
|
||||
|
||||
|
||||
|
||||
@@ -268,6 +268,17 @@ public class NFDirectoryServer {
|
||||
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:
|
||||
System.err.println("Unexpected message operation: \"" + operation + "\"");
|
||||
System.exit(-1);
|
||||
|
||||
Reference in New Issue
Block a user