/* * 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; } }