package lsr.paxos.messages; import java.io.DataInputStream; import java.io.IOException; import java.nio.ByteBuffer; import java.util.Arrays; import lsr.common.ClientRequest; /** * Represents a message containing a batch of requests and the corresponding * batch id. Each batch is identified by a batch id, composed of <replicaID, * localSeqNumber>. */ public final class ForwardClientRequests extends Message { private static final long serialVersionUID = 1L; private final ClientRequest[] requests; protected ForwardClientRequests(DataInputStream input) throws IOException { super(input); int size = input.readInt(); requests = new ClientRequest[size]; for (int i = 0; i < requests.length; i++) { requests[i] = ClientRequest.create(input); } } /** * Warning: this constructor keeps a reference to the array * <code>rcvdUB</code>. Make sure that this array is not changed after * calling this constructor. * * @param id * @param requests * @param rcvdUB */ public ForwardClientRequests(ClientRequest[] requests) { super(-1); this.requests = requests; } public MessageType getType() { return MessageType.ForwardedClientRequests; } protected void write(ByteBuffer bb) { bb.putInt(requests.length); for (int i = 0; i < requests.length; i++) { requests[i].writeTo(bb); } } public int byteSize() { int reqSize = 0; for (int i = 0; i < requests.length; i++) { reqSize += requests[i].byteSize(); } return super.byteSize() + 4 + reqSize; } public String toString() { return super.toString() + " (" + Arrays.toString(requests) + ")"; } public ClientRequest[] getRequests() { return requests; } }