This commit is contained in:
binlaab
2026-04-25 20:18:44 +02:00
parent 0cf758943b
commit e0eabbd9a8
3 changed files with 90 additions and 24 deletions

View File

@@ -223,22 +223,39 @@ public class NFController {
* clientStatus.
*/
boolean commandAllowed = true;
switch (currentCommand) {
case NFCommands.COM_MYFILES: {
commandAllowed = true;
break;
}
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;
case NFCommands.COM_PING: {
// ?????
}
default:
// System.err.println("ERROR: undefined behaviour for " + currentCommand + "
// command!");
}
return commandAllowed;
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() {

View File

@@ -24,6 +24,8 @@ public class PeerMessage {
private byte filenameLong;
private String filenameVal;
private byte[] fileData;
@@ -89,6 +91,14 @@ public class PeerMessage {
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
* DirMessage que contiene los datos del mensaje recibido
@@ -138,6 +148,16 @@ public class PeerMessage {
break;
}
case PeerMessageOps.OPCODE_REQUEST_PEER_DL: {
int longitudSubHash = (int)dis.readByte();
byte[] subHash = new byte[longitudSubHash];
dis.readFully(subHash);
break;
// buscar archivo supongo
}
default:

View File

@@ -16,6 +16,12 @@ public class PeerMessageOps {
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<String, Byte> _operation_to_opcode;