From e0eabbd9a84308478853bcc042cd56ef0c3b9e12 Mon Sep 17 00:00:00 2001 From: binlaab Date: Sat, 25 Apr 2026 20:18:44 +0200 Subject: [PATCH] uwu --- es/um/redes/nanoFiles/logic/NFController.java | 76 +++++++++++++------ .../nanoFiles/tcp/message/PeerMessage.java | 20 +++++ .../nanoFiles/tcp/message/PeerMessageOps.java | 18 ++++- 3 files changed, 90 insertions(+), 24 deletions(-) diff --git a/es/um/redes/nanoFiles/logic/NFController.java b/es/um/redes/nanoFiles/logic/NFController.java index 084eca1..bc4631b 100644 --- a/es/um/redes/nanoFiles/logic/NFController.java +++ b/es/um/redes/nanoFiles/logic/NFController.java @@ -223,22 +223,39 @@ public class NFController { * clientStatus. */ boolean commandAllowed = true; - switch (currentCommand) { - case NFCommands.COM_MYFILES: { - commandAllowed = true; - break; - } - - case NFCommands.COM_PING: { - - // ????? - } - - default: - // System.err.println("ERROR: undefined behaviour for " + currentCommand + " - // command!"); - } - return commandAllowed; + switch (currentCommand) { + //Comandos SIEMPRE permitidos + case NFCommands.COM_MYFILES: + case NFCommands.COM_QUIT: + case NFCommands.COM_HELP: + case NFCommands.COM_NICK: + commandAllowed = true; + break; + //Comandos permitidos:OFFLINE + case NFCommands.COM_PING: + commandAllowed = (currentState == OFFLINE); + if (!commandAllowed) { + System.err.println("* Ya estás conectado al directorio. No necesitas hacer ping de nuevo."); + } + break; + //Comandos permitidos:ONLINE + case NFCommands.COM_FILELIST_DIR: + case NFCommands.COM_PEERLIST: + case NFCommands.COM_SERVE: + case NFCommands.COM_DOWNLOAD_DIR: + case NFCommands.COM_FILELIST_PEER: + case NFCommands.COM_DOWNLOAD_PEER: + commandAllowed = (currentState == ONLINE); + if (!commandAllowed) { + System.err.println("* Comando no permitido en estado OFFLINE. Haz un 'ping' primero."); + } + break; + + default: + commandAllowed = false; + System.err.println("ERROR: undefined behaviour for " + currentCommand + " command!"); + } + return commandAllowed; } private void updateCurrentState(boolean success) { @@ -248,12 +265,27 @@ public class NFController { * siguiente estado y así permitir unos u otros comandos en cada caso. */ if (!success) { - return; - } - switch (currentCommand) { - default: - } - + return; //Si falla, no cambiamos de estado + } + + switch (currentCommand) { + case NFCommands.COM_PING: + currentState = ONLINE; + break; + + case NFCommands.COM_QUIT: + currentState = OFFLINE; + break; + + default: + /* + * Los únicos comandos que cambian el estado del autómata son el + * 'ping' para ponerlo en ONLINE, y el 'quit' para ponerlo en + * OFFLINE, por lo tanto, los demás comandos no alterarán el + * estado del autómata + */ + break; + } } private void showMyLocalFiles() { diff --git a/es/um/redes/nanoFiles/tcp/message/PeerMessage.java b/es/um/redes/nanoFiles/tcp/message/PeerMessage.java index c786e41..4e7ad8d 100644 --- a/es/um/redes/nanoFiles/tcp/message/PeerMessage.java +++ b/es/um/redes/nanoFiles/tcp/message/PeerMessage.java @@ -23,6 +23,8 @@ public class PeerMessage { private String fileHash; private byte filenameLong; private String filenameVal; + + private byte[] fileData; @@ -88,6 +90,14 @@ public class PeerMessage { public void setFilenameVal(String filenameVal) { this.filenameVal = filenameVal; } + + public byte[] getFileData() { + return fileData; + } + + public void setFileData(byte[] fileData) { + this.fileData = fileData; + } /** * Método de clase para parsear los campos de un mensaje y construir el objeto @@ -137,6 +147,16 @@ public class PeerMessage { message.setFilenameVal(new String(filenameVal)); break; } + + case PeerMessageOps.OPCODE_REQUEST_PEER_DL: { + int longitudSubHash = (int)dis.readByte(); + byte[] subHash = new byte[longitudSubHash]; + dis.readFully(subHash); + break; + // buscar archivo supongo + + } + diff --git a/es/um/redes/nanoFiles/tcp/message/PeerMessageOps.java b/es/um/redes/nanoFiles/tcp/message/PeerMessageOps.java index 9f903b6..698c0bd 100644 --- a/es/um/redes/nanoFiles/tcp/message/PeerMessageOps.java +++ b/es/um/redes/nanoFiles/tcp/message/PeerMessageOps.java @@ -15,6 +15,12 @@ public class PeerMessageOps { public static final byte OPCODE_REQUEST_PEER_FILES = 1; public static final byte OPCODE_PEER_FILE = 2; public static final byte OPCODE_PEER_FILES_ERROR = 3; + + public static final byte OPCODE_REQUEST_PEER_DL = 4; + public static final byte OPCODE_FILE_NOT_FOUND = 5; + public static final byte OPCODE_AMBIGUOUS = 6; + public static final byte OPCODE_PEER_DL = 7; + @@ -26,12 +32,20 @@ public class PeerMessageOps { private static final Byte[] _valid_opcodes = { OPCODE_INVALID_CODE, OPCODE_REQUEST_PEER_FILES, OPCODE_PEER_FILE, - OPCODE_PEER_FILES_ERROR + OPCODE_PEER_FILES_ERROR, + OPCODE_REQUEST_PEER_DL, + OPCODE_FILE_NOT_FOUND, + OPCODE_AMBIGUOUS, + OPCODE_PEER_DL }; private static final String[] _valid_operations_str = { "INVALID_OPCODE", "REQUEST_PEER_FILES", "PEER_FILE", - "PEER_FILES_ERROR" + "PEER_FILES_ERROR", + "REQUEST_PEER_DL", + "FILE_NOT_FOUND", + "FILE_AMBIGUOUS", + "PEER_DL" }; private static Map _operation_to_opcode;