public class JPacket { private int _Size = 128; private static ByteBuffer _Buf;
// 타입들 public static final short DEFAULT = 999; public static final short LOGIN = 10; public static final short LOGININFOR = 11; public static final short DISCONNECT = 12; public static final short RESEND = 13; public static final short CHAT = 20; public static final short WHISPER = 21; public static final short FIGHT = 30; public static final short TESTPACKET = 41; // 받을때 처리 메시지 public static String RecvMsg = ""; //정수형 데이터 private final int INTEGER = 999; //패킷 처리 private boolean _RecvSucess = true;
// 사이즈 직접 조정하기 public JPacket(int Size) { _Size =Size; _Buf = ByteBuffer.allocate(_Size); _Buf.clear(); } //사이즈 public int Size(){ return _Size; } // 데이터의 타입 설정 public void Type(short _Type) { // short 사이즈/ byte사이즈가 현재 버퍼를 사용한것보다 작을시에는 데이터 못넣게 Error if (_Buf.remaining() > Short.SIZE / Byte.SIZE) { _Buf.putShort(_Type); } else { OverPacket(); } }
// 데이터 삽입 public void Add(String _Data) { int Size = _Data.getBytes().length; if (_Buf.remaining() > (Size + Integer.SIZE / Byte.SIZE)) { _Buf.putInt(Size); _Buf.put(_Data.getBytes()); } else { OverPacket(); } } public void Add(int _Data) { int IntegerSize = INTEGER; if (_Buf.remaining() > (Integer.SIZE * 2) / Byte.SIZE) { _Buf.putInt(IntegerSize); _Buf.putInt(_Data); } else { OverPacket(); } } public ByteBuffer getBuf() { //포지션 초기화 _Buf.rewind(); return _Buf; } // 버퍼사이즈보다 클경우 초기화후 이벤트처리 public boolean OverPacket() { _Buf.clear(); return false; } public void Clear() { _Buf.flip(); _Buf.clear(); }
public String RecvOut(ByteBuffer _RecvBuf) { String _RecvMsg = ""; _RecvSucess = true; int trySize = _RecvBuf.getInt(); switch (trySize) { case INTEGER: _RecvMsg += _RecvBuf.getInt(); break; default: byte[] StrBuf = new byte[trySize]; _RecvBuf.get(StrBuf); _RecvMsg += new String(StrBuf); break; } return _RecvMsg; }
}
이 소스에 대해서는 딱히 설명할부분은 없는거 같습니다.
메소드마다 주석처리가 되어있는데 그점을 참고하시면 되겠습니다 :D
##제가 만든 소스이니 마음껏 사용하셔도 되는데 이름만큼은 변경해주지 말아주셨으면 합니다.