quemen redes

This commit is contained in:
binlaab
2026-04-20 22:38:38 +02:00
parent aa8b7b30fb
commit 25bf19ee9c
15 changed files with 414 additions and 42 deletions

View File

@@ -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;
}

View File

@@ -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