/* (non-Javadoc) @see java.util.Queue#offer(java.lang.Object) */ @Override public final boolean offer(final byte[] b) { // int curridx = wbuffidx; short curridx = wbuffidx; ByteBuffer currbuff = wbuffers[wbuffidx]; final int currcap = currbuff.remaining(); if (b.length > currcap) { currbuff.clear(); // REVU: not handling sender overtaking receiver curridx = (short) ((curridx + 1) % DATA_BUFF_CNT); currbuff = wbuffers[curridx]; wbuffidx = curridx; } // currbuff.put(b); // REVU: flush first? if (sndbuffoff + MSG_SIZE > sndbuffer.length) { /* flush */ try { this.sndout.write(sndbuffer); this.sndout.flush(); sndbuffoff = 0; } catch (IOException e1) { e1.printStackTrace(); } } currbuff.put(b); // REVU^:Or write first? // DataCodec.writeInt(wbuffidx, sndbuffer, sndbuffoff); sndbuffoff += DataCodec.INTEGER_BYTES; // DataCodec.writeInt(b.length, sndbuffer, sndbuffoff); sndbuffoff += DataCodec.INTEGER_BYTES; DataCodec.writeShort(wbuffidx, sndbuffer, sndbuffoff); sndbuffoff += DataCodec.SHORT_BYTES; DataCodec.writeShort((short) b.length, sndbuffer, sndbuffoff); sndbuffoff += DataCodec.SHORT_BYTES; return true; }