mirror of
https://github.com/binlaab/nanofiles.git
synced 2026-07-01 18:36:30 +02:00
quemen redes
This commit is contained in:
@@ -276,8 +276,21 @@ public class DirectoryConnector {
|
||||
boolean success = false;
|
||||
|
||||
// TODO: Ver TODOs en pingDirectory y seguir esquema similar
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* done: (Boletín MensajesASCII) Hacer ping al directorio 1.Crear el mensaje a
|
||||
* enviar (objeto DirMessage) con atributos adecuados (operation, etc.) NOTA:
|
||||
* Usar como operaciones las constantes definidas en la clase DirMessageOps :
|
||||
* 2.Convertir el objeto DirMessage a enviar a un string (método toString)
|
||||
* 3.Crear un datagrama con los bytes en que se codifica la cadena : 4.Enviar
|
||||
* datagrama y recibir una respuesta (sendAndReceiveDatagrams). : 5.Convertir
|
||||
* respuesta recibida en un objeto DirMessage (método DirMessage.fromString)
|
||||
* 6.Extraer datos del objeto DirMessage y procesarlos 7.Devolver éxito/fracaso
|
||||
* de la operación
|
||||
*/
|
||||
|
||||
DirMessage serve = new DirMessage(DirMessageOps.OPERATION_SERVE);
|
||||
|
||||
|
||||
return success;
|
||||
}
|
||||
@@ -291,7 +304,11 @@ public class DirectoryConnector {
|
||||
*/
|
||||
public FileInfo[] getFileList() {
|
||||
FileInfo[] filelist = new FileInfo[0];
|
||||
// TODO: Ver TODOs en pingDirectory y seguir esquema similar
|
||||
DirMessage dirfiles = new DirMessage(DirMessageOps.OPERATION_DIRFILES);
|
||||
byte[] dirfilesBytes = dirfiles.toString().getBytes();
|
||||
byte[] resp = sendAndReceiveDatagrams(dirfilesBytes);
|
||||
|
||||
DirMessage respDirfiles = DirMessage.fromString(resp.toString());
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
package es.um.redes.nanoFiles.udp.message;
|
||||
|
||||
import es.um.redes.nanoFiles.application.Directory;
|
||||
import es.um.redes.nanoFiles.application.NanoFiles;
|
||||
import es.um.redes.nanoFiles.util.FileInfo;
|
||||
|
||||
/**
|
||||
* Clase que modela los mensajes del protocolo de comunicación entre pares para
|
||||
@@ -26,6 +28,10 @@ public class DirMessage {
|
||||
* todos los campos que pueden aparecer en los mensajes de este protocolo
|
||||
* (formato campo:valor)
|
||||
*/
|
||||
private static final String FIELDNAME_FILENAME = "filename";
|
||||
private static final String FIELDNAME_FILESIZE = "size";
|
||||
private static final String FIELDNAME_FILEHASH = "hash";
|
||||
private static final String FIELDNAME_FILEPATH = "path";
|
||||
|
||||
private static final String FIELDNAME_PROTOCOL = "protocol";
|
||||
/**
|
||||
@@ -36,6 +42,7 @@ public class DirMessage {
|
||||
* Identificador de protocolo usado, para comprobar compatibilidad del directorio.
|
||||
*/
|
||||
private String protocolId;
|
||||
private FileInfo[] fileList;
|
||||
/*
|
||||
* TODO: (Boletín MensajesASCII) Crear un atributo correspondiente a cada uno de
|
||||
* los campos de los diferentes mensajes de este protocolo.
|
||||
@@ -44,6 +51,11 @@ public class DirMessage {
|
||||
public DirMessage(String op) {
|
||||
operation = op;
|
||||
}
|
||||
|
||||
public DirMessage(String op, String nick, String ip, int puerto) {
|
||||
this(op);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* TODO: (Boletín MensajesASCII) Crear diferentes constructores adecuados para
|
||||
@@ -70,12 +82,22 @@ public class DirMessage {
|
||||
}
|
||||
|
||||
public String getProtocolId() {
|
||||
|
||||
|
||||
|
||||
return protocolId;
|
||||
}
|
||||
|
||||
|
||||
public FileInfo[] getFileList () {
|
||||
return fileList;
|
||||
}
|
||||
|
||||
public void setFileList(FileInfo f) {
|
||||
if (!operation.equals(DirMessageOps.OPERATION_REQUEST_DIRFILES)) {
|
||||
throw new RuntimeException (
|
||||
"DirMessage: setFileList called for message of type " + operation
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Método que convierte un mensaje codificado como una cadena de caracteres, a
|
||||
* un objeto de la clase PeerMessage, en el cual los atributos correspondientes
|
||||
@@ -86,6 +108,7 @@ public class DirMessage {
|
||||
* etc.)
|
||||
*/
|
||||
public static DirMessage fromString(String message) {
|
||||
System.out.println(message);
|
||||
/*
|
||||
* TODO: (Boletín MensajesASCII) Usar un bucle para parsear el mensaje línea a
|
||||
* línea, extrayendo para cada línea el nombre del campo y el valor, usando el
|
||||
@@ -96,7 +119,13 @@ public class DirMessage {
|
||||
String[] lines = message.split(END_LINE + "");
|
||||
// Local variables to save data during parsing
|
||||
DirMessage m = null;
|
||||
|
||||
String filename = null;
|
||||
long filesize = 0;
|
||||
String filehash = null;
|
||||
String filepath = null;
|
||||
|
||||
// de alguna forma tengo que hacer un array de FileInfo
|
||||
// ArrayList y de ahí a array?
|
||||
for (String line : lines) {
|
||||
int idx = line.indexOf(DELIMITER); // Posición del delimitador
|
||||
String fieldName = line.substring(0, idx).toLowerCase(); // minúsculas
|
||||
@@ -113,6 +142,23 @@ public class DirMessage {
|
||||
m.setProtocolID(value);
|
||||
break;
|
||||
}
|
||||
|
||||
case FIELDNAME_FILENAME: {
|
||||
filename = value;
|
||||
break;
|
||||
}
|
||||
|
||||
case FIELDNAME_FILESIZE: {
|
||||
filesize = Long.parseLong(value);
|
||||
break;
|
||||
}
|
||||
|
||||
case FIELDNAME_FILEHASH: {
|
||||
filehash = value;
|
||||
FileInfo f = new FileInfo(filehash, filename, filesize, filepath);
|
||||
// fileList += f;
|
||||
// y esto que, muchas gracias iniesta
|
||||
}
|
||||
|
||||
|
||||
default:
|
||||
@@ -150,6 +196,16 @@ public class DirMessage {
|
||||
sb.append(FIELDNAME_PROTOCOL + DELIMITER + NanoFiles.PROTOCOL_ID + END_LINE);
|
||||
break;
|
||||
|
||||
case DirMessageOps.OPERATION_DIRFILES:
|
||||
FileInfo[] filelist = FileInfo.loadFilesFromFolder(Directory.DEFAULT_DIRECTORY_FILES_PATH);
|
||||
sb.append(FIELDNAME_OPERATION + DELIMITER + operation + END_LINE);
|
||||
for (FileInfo f : filelist) {
|
||||
sb.append(FIELDNAME_FILENAME + DELIMITER + f.fileName + END_LINE);
|
||||
sb.append(FIELDNAME_FILESIZE + DELIMITER + f.fileSize + END_LINE);
|
||||
sb.append(FIELDNAME_FILEHASH + DELIMITER + f.fileHash + END_LINE);
|
||||
sb.append(FIELDNAME_FILEPATH + DELIMITER + f.filePath + END_LINE);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -12,6 +12,11 @@ public class DirMessageOps {
|
||||
|
||||
public static final String OPERATION_PING_OK = "pingOk";
|
||||
public static final String OPERATION_PING_BAD = "pingBad";
|
||||
|
||||
public static final String OPERATION_REQUEST_DIRFILES = "dirfiles";
|
||||
public static final String OPERATION_DIRFILES = "dirFilesList";
|
||||
|
||||
public static final String OPERATION_SERVE = "serve";
|
||||
// TODO: definir las operaciones del protocolo de directorio
|
||||
|
||||
|
||||
|
||||
@@ -9,6 +9,7 @@ import java.net.SocketException;
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedHashMap;
|
||||
|
||||
import es.um.redes.nanoFiles.application.Directory;
|
||||
import es.um.redes.nanoFiles.application.NanoFiles;
|
||||
import es.um.redes.nanoFiles.udp.message.DirMessage;
|
||||
import es.um.redes.nanoFiles.udp.message.DirMessageOps;
|
||||
@@ -140,7 +141,7 @@ public class NFDirectoryServer {
|
||||
*/
|
||||
|
||||
/*
|
||||
* TODO: (Boletín Estructura-NanoFiles) Ampliar el código para que, en el caso
|
||||
* done: (Boletín Estructura-NanoFiles) Ampliar el código para que, en el caso
|
||||
* de que la cadena recibida no sea exactamente "ping", comprobar si comienza
|
||||
* por "ping&" (es del tipo "ping&PROTOCOL_ID", donde PROTOCOL_ID será el
|
||||
* identificador del protocolo diseñado por el grupo de prácticas (ver
|
||||
@@ -200,7 +201,7 @@ public class NFDirectoryServer {
|
||||
System.out.println("Hemos recibido: \n" + receivedData);
|
||||
DirMessage receivedMsg = DirMessage.fromString(receivedData);
|
||||
/*
|
||||
* TODO: Una vez construido un objeto DirMessage con el contenido del datagrama
|
||||
* done: Una vez construido un objeto DirMessage con el contenido del datagrama
|
||||
* recibido, obtener el tipo de operación solicitada por el mensaje y actuar en
|
||||
* consecuencia, enviando uno u otro tipo de mensaje en respuesta.
|
||||
*/
|
||||
@@ -236,12 +237,18 @@ public class NFDirectoryServer {
|
||||
* resultado del método.
|
||||
*/
|
||||
/*
|
||||
* TODO: (Boletín MensajesASCII) Imprimimos por pantalla el resultado de
|
||||
* done: (Boletín MensajesASCII) Imprimimos por pantalla el resultado de
|
||||
* procesar la petición recibida (éxito o fracaso) con los datos relevantes, a
|
||||
* modo de depuración en el servidor
|
||||
*/
|
||||
break;
|
||||
}
|
||||
|
||||
case DirMessageOps.OPERATION_REQUEST_DIRFILES : {
|
||||
FileInfo[] filelist = FileInfo.loadFilesFromFolder(Directory.DEFAULT_DIRECTORY_FILES_PATH);
|
||||
operation = DirMessageOps.OPERATION_DIRFILES;
|
||||
break;
|
||||
}
|
||||
|
||||
default:
|
||||
System.err.println("Unexpected message operation: \"" + operation + "\"");
|
||||
@@ -249,7 +256,7 @@ public class NFDirectoryServer {
|
||||
}
|
||||
|
||||
/*
|
||||
* TODO: (Boletín MensajesASCII) Convertir a String el objeto DirMessage
|
||||
* done: (Boletín MensajesASCII) Convertir a String el objeto DirMessage
|
||||
* (msgToSend) con el mensaje de respuesta a enviar, extraer los bytes en que se
|
||||
* codifica el string y finalmente enviarlos en un datagrama
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user