arreglado ping y empezado peerdl y dirdl

This commit is contained in:
binlaab
2026-04-26 18:18:50 +02:00
parent e0eabbd9a8
commit b179408874
9 changed files with 97 additions and 26 deletions

View File

@@ -246,6 +246,7 @@ public class NFController {
case NFCommands.COM_FILELIST_PEER:
case NFCommands.COM_DOWNLOAD_PEER:
commandAllowed = (currentState == ONLINE);
System.out.println("allowed = " + commandAllowed);
if (!commandAllowed) {
System.err.println("* Comando no permitido en estado OFFLINE. Haz un 'ping' primero.");
}
@@ -270,6 +271,7 @@ public class NFController {
switch (currentCommand) {
case NFCommands.COM_PING:
System.out.println("updateCurrentState ping");
currentState = ONLINE;
break;

View File

@@ -2,6 +2,8 @@ package es.um.redes.nanoFiles.logic;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.util.LinkedList;
import java.util.Map;
import java.io.IOException;
import es.um.redes.nanoFiles.tcp.client.NFConnector;
import es.um.redes.nanoFiles.application.NanoFiles;
@@ -157,12 +159,36 @@ public class NFControllerLogicP2P {
// TODO: localizar peers con el hash solicitado (o uno concreto) y delegar en
// downloadFileFromServers
boolean success = false;
LinkedList<InetSocketAddress> peersWithFile = new LinkedList<>();
Map<String, InetSocketAddress> peers = dirLogic.fetchPeerList();
LinkedList<InetSocketAddress> targets = new LinkedList<>();
/* if (targetPeerNickname == "*") { bloqueado de momento
targets.addAll(peers.values());
} else { */
targets.add(peers.get(targetPeerNickname));
// }
for (InetSocketAddress addr : targets) {
try {
NFConnector nfc = new NFConnector(addr);
FileInfo[] peerFiles = nfc.getFileList();
// la longitud tiene que ser EXACTAMENTE 1, si es 0 no hay, si es > 1 es ambiguo
// y si resulta que dos peers tienen un mismo subhash sin tener el mismo hash?
// mando que no se ha podido descargar? comparo contra el hash del primero?
FileInfo[] peerFilesFound = FileInfo.lookupHashSubstring(peerFiles, targetHashSubstring);
if (peerFilesFound.length == 1) {
peersWithFile.add(addr);
}
} catch (IOException e) { e.printStackTrace(); }
}
success = downloadFileFromServers(peersWithFile.toArray(new InetSocketAddress[0]), targetHashSubstring);
return success;
}
/**
* Método para descargar un fichero del peer servidor de ficheros
*
@@ -180,10 +206,15 @@ public class NFControllerLogicP2P {
// TODO: crear conectores TCP solo a los servidores que confirmen el hash
// pedido, obtener nombre remoto, reservar nombre local sin colisiones, alternar
// descarga de chunks y verificar hash final. Cerrar los sockets al terminar.
NFConnector[] peerConns = new NFConnector[serverAddressList.length];
for (int i = 0; i < serverAddressList.length; i++) {
try {
NFConnector nfc = new NFConnector(serverAddressList[i]);
peerConns[i] = nfc;
} catch (IOException e) { e.printStackTrace(); }
}
return downloaded;
}
@@ -207,10 +238,9 @@ public class NFControllerLogicP2P {
/*
* TODO: Devolver el puerto de escucha de nuestro servidor de ficheros
*/
return NFServer.PORT;
if (fileServer != null) {
return fileServer.getServerSocket().getLocalPort();
} else return 0;
}
/**