mirror of
https://github.com/binlaab/nanofiles.git
synced 2026-07-01 16:47:30 +02:00
práctica 3, falta la última parte
This commit is contained in:
103
es/um/redes/nanoFiles/tcp/message/PeerMessage.java
Normal file
103
es/um/redes/nanoFiles/tcp/message/PeerMessage.java
Normal file
@@ -0,0 +1,103 @@
|
||||
package es.um.redes.nanoFiles.tcp.message;
|
||||
|
||||
import java.io.DataInputStream;
|
||||
import java.io.DataOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import es.um.redes.nanoFiles.util.FileInfo;
|
||||
|
||||
public class PeerMessage {
|
||||
|
||||
|
||||
|
||||
|
||||
private byte opcode;
|
||||
|
||||
/*
|
||||
* TODO: (Boletín MensajesBinarios) Añadir atributos u otros constructores
|
||||
* específicos para crear mensajes con otros campos, según sea necesario
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
|
||||
public PeerMessage() {
|
||||
opcode = PeerMessageOps.OPCODE_INVALID_CODE;
|
||||
}
|
||||
|
||||
public PeerMessage(byte op) {
|
||||
opcode = op;
|
||||
}
|
||||
|
||||
/*
|
||||
* TODO: (Boletín MensajesBinarios) Crear métodos getter y setter para obtener
|
||||
* los valores de los atributos de un mensaje. Se aconseja incluir código que
|
||||
* compruebe que no se modifica/obtiene el valor de un campo (atributo) que no
|
||||
* esté definido para el tipo de mensaje dado por "operation".
|
||||
*/
|
||||
public byte getOpcode() {
|
||||
return opcode;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Método de clase para parsear los campos de un mensaje y construir el objeto
|
||||
* DirMessage que contiene los datos del mensaje recibido
|
||||
*
|
||||
* @param data El array de bytes recibido
|
||||
* @return Un objeto de esta clase cuyos atributos contienen los datos del
|
||||
* mensaje recibido.
|
||||
* @throws IOException
|
||||
*/
|
||||
public static PeerMessage readMessageFromInputStream(DataInputStream dis) throws IOException {
|
||||
/*
|
||||
* TODO: (Boletín MensajesBinarios) En función del tipo de mensaje, leer del
|
||||
* socket a través del "dis" el resto de campos para ir extrayendo con los
|
||||
* valores y establecer los atributos del un objeto DirMessage que contendrá
|
||||
* toda la información del mensaje, y que será devuelto como resultado. NOTA:
|
||||
* Usar dis.readFully para leer un array de bytes, dis.readInt para leer un
|
||||
* entero, etc.
|
||||
*/
|
||||
PeerMessage message = new PeerMessage();
|
||||
byte opcode = dis.readByte();
|
||||
switch (opcode) {
|
||||
|
||||
|
||||
|
||||
default:
|
||||
System.err.println("PeerMessage.readMessageFromInputStream doesn't know how to parse this message opcode: "
|
||||
+ PeerMessageOps.opcodeToOperation(opcode));
|
||||
System.exit(-1);
|
||||
}
|
||||
return message;
|
||||
}
|
||||
|
||||
public void writeMessageToOutputStream(DataOutputStream dos) throws IOException {
|
||||
/*
|
||||
* TODO (Boletín MensajesBinarios): Escribir los bytes en los que se codifica el
|
||||
* mensaje en el socket a través del "dos", teniendo en cuenta opcode del
|
||||
* mensaje del que se trata y los campos relevantes en cada caso. NOTA: Usar
|
||||
* dos.write para leer un array de bytes, dos.writeInt para escribir un entero,
|
||||
* etc.
|
||||
*/
|
||||
|
||||
dos.writeByte(opcode);
|
||||
switch (opcode) {
|
||||
|
||||
|
||||
|
||||
|
||||
default:
|
||||
System.err.println("PeerMessage.writeMessageToOutputStream found unexpected message opcode " + opcode + "("
|
||||
+ PeerMessageOps.opcodeToOperation(opcode) + ")");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user