79 lines
2.7 KiB
Java
79 lines
2.7 KiB
Java
package protocolP2P;
|
|
import protocolP2P.Payload;
|
|
import protocolP2P.RequestResponseCode;
|
|
import localException.TransmissionError;
|
|
import localException.ProtocolError;
|
|
import localException.InternalError;
|
|
import localException.SizeError;
|
|
import tools.BytesArrayTools;
|
|
|
|
/** Representation of payload for list response.
|
|
* @author Louis Royer
|
|
* @author Flavien Haas
|
|
* @author JS Auge
|
|
* @version 1.0
|
|
*/
|
|
public class FileList extends Payload {
|
|
private String[] fileList;
|
|
|
|
/** Constructor (typically used by the server) with an ArrayList parameter containing
|
|
* filenames.
|
|
* @param fileList a list of files. Must not be empty.
|
|
* @throws InternalError
|
|
*/
|
|
public FileList(String[] fileList) throws InternalError {
|
|
super(RequestResponseCode.LIST_RESPONSE);
|
|
/* assert to help debugging */
|
|
assert fileList.length != 0 : "Payload size of FileList must not be empty, use EmptyDirectory from Payload instead";
|
|
if (fileList.length == 0) {
|
|
throw new InternalError();
|
|
}
|
|
this.fileList = fileList;
|
|
}
|
|
|
|
/** Constructor (typically used by client) with a byte[] parameter containing the Packet received.
|
|
* @param packet the full packet received
|
|
* @throws SizeError
|
|
* @throws InternalError
|
|
* @throws ProtocolError
|
|
* @throws TransmissionError
|
|
*/
|
|
protected FileList(byte[] packet) throws TransmissionError, SizeError, ProtocolError, InternalError {
|
|
super(packet);
|
|
/* assert to help debugging */
|
|
assert requestResponseCode == RequestResponseCode.LIST_RESPONSE : "FileList subclass is incompatible with this Packet, request/response code must be checked before using this constructor";
|
|
/* InternalErrorException */
|
|
if (requestResponseCode!= RequestResponseCode.LIST_RESPONSE) {
|
|
throw new InternalError();
|
|
}
|
|
int size = getPayloadSize(packet);
|
|
fileList = BytesArrayTools.readStringArray(packet, PAYLOAD_START_POSITION, size, "\n");
|
|
}
|
|
|
|
/** Returns a byte[] containing Packet with padding.
|
|
* This Packet is still incomplete and should not be send directly.
|
|
* ProtocolP2PPacket will use this method to generate the complete Packet.
|
|
* @return Packet with padding
|
|
* @throws InternalError
|
|
*/
|
|
protected byte[] toPacket() throws InternalError {
|
|
// compute size
|
|
int size = PAYLOAD_START_POSITION + BytesArrayTools.computeStringArraySize(fileList, "\n");
|
|
byte[] packet = new byte[size]; // java initialize all to zero
|
|
// set request/response code
|
|
packet[RequestResponseCode.RRCODE_POSITION] = requestResponseCode.codeValue;
|
|
// set payload size
|
|
setPayloadSize(size - PAYLOAD_START_POSITION, packet);
|
|
// Write fileList
|
|
BytesArrayTools.write(packet, fileList, PAYLOAD_START_POSITION, "\n");
|
|
return packet;
|
|
}
|
|
|
|
/** fileList getter.
|
|
* @return fileList
|
|
*/
|
|
public String[] getFileList() {
|
|
return fileList;
|
|
}
|
|
}
|