Пример #1
0
  /* (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;
  }