mirror of
https://github.com/binlaab/nanofiles.git
synced 2026-07-01 20:06:28 +02:00
arreglado ping y empezado peerdl y dirdl
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user