MotanV2Header { public byte[] toBytes() { ByteBuffer buf = ByteBuffer.allocate(13); buf.putShort(MAGIC); byte msgType = (byte) 0x00; if (heartbeat) { msgType = (byte) (msgType | 0x10); } if (gzip) { msgType = (byte) (msgType | 0x08); } if (oneway) { msgType = (byte) (msgType | 0x04); } if (proxy) { msgType = (byte) (msgType | 0x02); } if (!request) { msgType = (byte) (msgType | 0x01); } buf.put(msgType); byte vs = 0x08; if (version != 1) { vs = (byte) ((version << 3) & 0xf8); } if (status != 0) { vs = (byte) (vs | (status & 0x07)); } buf.put(vs); byte se = 0x08; if (serialize != 1) { se = (byte) ((serialize << 3) & 0xf8); } buf.put(se); buf.putLong(requestId); buf.flip(); return buf.array(); }  int getVersion(); void setVersion(int version); boolean isHeartbeat(); void setHeartbeat(boolean heartbeat); boolean isGzip(); void setGzip(boolean gzip); boolean isOneway(); void setOneway(boolean oneway); boolean isProxy(); void setProxy(boolean proxy); boolean isRequest(); void setRequest(boolean request); int getStatus(); void setStatus(int status); int getSerialize(); void setSerialize(int serialize); long getRequestId(); void setRequestId(long requestId); byte[] toBytes(); static MotanV2Header buildHeader(byte[] headerBytes); @Override boolean equals(Object o); @Override int hashCode(); static final short MAGIC; }
@Test public void testToBytes() throws Exception { MotanV2Header header = new MotanV2Header(); header.setProxy(true); checkEquals(header); header.setRequestId(123l); checkEquals(header); header.setGzip(true); checkEquals(header); header.setOneway(true); checkEquals(header); header.setHeartbeat(true); checkEquals(header); header.setRequest(false); checkEquals(header); header.setVersion(6); checkEquals(header); header.setSerialize(3); checkEquals(header); header.setStatus(5); checkEquals(header); header.setRequestId(-798729l); checkEquals(header); }