package org.limewire.rudp.messages.impl;
import java.nio.ByteBuffer;
import org.limewire.rudp.messages.DataMessage;
import org.limewire.rudp.messages.MessageFormatException;
/** The data message is used to communicate data on the connection.
*/
class DataMessageImpl extends RUDPMessageImpl implements DataMessage {
private final ByteBuffer chunk;
/**
* Construct a new <code>DataMessage</code> with the specified data.
*/
DataMessageImpl(byte connectionID, long sequenceNumber, ByteBuffer chunk) {
super(connectionID, OpCode.OP_DATA, sequenceNumber, chunk.array(), chunk.remaining());
this.chunk = chunk;
}
DataMessageImpl(byte connectionID, long sequenceNumber, byte[] data, int len) {
super(connectionID, OpCode.OP_DATA, sequenceNumber, data, len);
this.chunk = null;
}
/* (non-Javadoc)
* @see org.limewire.rudp.messages.impl.DataMessage#getChunk()
*/
public ByteBuffer getChunk() {
return chunk;
}
/**
* Construct a new <code>DataMessage</code> from the network.
*/
DataMessageImpl(byte connectionId, long sequenceNumber, ByteBuffer data1, ByteBuffer data2)
throws MessageFormatException {
super(OpCode.OP_DATA, connectionId, sequenceNumber, data1, data2);
this.chunk = null;
}
/* (non-Javadoc)
* @see org.limewire.rudp.messages.impl.DataMessage#getData1Chunk()
*/
public ByteBuffer getData1Chunk() {
return _data1;
}
/* (non-Javadoc)
* @see org.limewire.rudp.messages.impl.DataMessage#getData2Chunk()
*/
public ByteBuffer getData2Chunk() {
return _data2;
}
/* (non-Javadoc)
* @see org.limewire.rudp.messages.impl.DataMessage#getDataAt(int)
*/
public byte getDataAt(int i) {
if (i < MAX_DATA1_SIZE)
return _data1.get(i + _data1.position());
else
return _data2.get(i-MAX_DATA1_SIZE + _data2.position());
}
@Override
public String toString() {
return "DataMessage DestID:"+getConnectionID()+" len:"+
getDataLength()+" seq:"+getSequenceNumber();
}
@Override
protected int getData1Length() {
return _data1.limit();
}
}