/*
* Created by Andrey Cherkashin (acherkashin)
* http://acherkashin.me
*
* License
* Copyright (c) 2015 Andrey Cherkashin
* The project released under the MIT license: http://opensource.org/licenses/MIT
*/
package ragefist.core.network;
import java.nio.ByteBuffer;
/**
*
* @author acherkashin
*/
public class PacketBufferDefault extends PacketBuffer
{
private final ByteBuffer _buffer;
private int _bytesToRead;
private int _bytesReaded;
public PacketBufferDefault(Integer bufferSize) {
super(bufferSize);
_buffer = ByteBuffer.allocate(bufferSize);
_bytesToRead = 0;
_bytesReaded = 0;
}
public void put(byte[] bytes) {
_buffer.put(bytes);
_bytesReaded += bytes.length;
}
public void put(ByteBuffer readBuffer, int offset, int length) {
byte[] bytes = new byte[length];
readBuffer.get(bytes, offset, length);
this.put(bytes);
}
public boolean canReadHeader() {
return _buffer.position() >= 4;
}
public boolean hasHeader() {
return _bytesToRead > 0;
}
public int getBytesToFinishPacket() {
return Math.max(0, _bytesToRead - _bytesReaded);
}
public void readHeader() {
_buffer.flip();
_bytesToRead = _buffer.getInt();
_bytesReaded = _buffer.remaining();
_buffer.compact();
}
public boolean hasPacket() {
return _bytesToRead > 0 && _bytesReaded >= _bytesToRead;
}
public byte[] readPacket() {
_buffer.flip();
byte[] bytes = new byte[_bytesToRead];
_buffer.get(bytes, 0, _bytesToRead);
_bytesReaded = _buffer.remaining();
_bytesToRead = 0;
_buffer.compact();
return bytes;
}
}