public void filterWrite(NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws Exception { if (session.getTransportType().getEnvelopeType().isAssignableFrom( writeRequest.getMessage().getClass())) { doWrite(session, writeRequest); } else { throw new IllegalStateException( "Write requests must be transformed to " + session.getTransportType().getEnvelopeType() + ": " + writeRequest); } }
break; ByteBuffer buf = (ByteBuffer) req.getMessage(); if (buf.remaining() == 0) {
break; ByteBuffer buf = (ByteBuffer) req.getMessage(); if (buf.remaining() == 0) { writeRequestQueue.poll();
break; ByteBuffer buf = (ByteBuffer) req.getMessage(); if (buf.remaining() == 0) {
if ( s.getTrafficMask().isWritable() && s.getLock().tryLock()) { try { Object message = writeRequest.getMessage();
private void releaseWriteBuffers(SocketSessionImpl session) { Queue<WriteRequest> writeRequestQueue = session.getWriteRequestQueue(); WriteRequest req; if ((req = writeRequestQueue.poll()) != null) { ByteBuffer buf = (ByteBuffer) req.getMessage(); try { buf.release(); } catch (IllegalStateException e) { session.getFilterChain().fireExceptionCaught(session, e); } finally { // The first unwritten empty buffer must be // forwarded to the filter chain. if (buf.hasRemaining()) { req.getFuture().setWritten(false); } else { session.getFilterChain().fireMessageSent(session, req); } } // Discard others. while ((req = writeRequestQueue.poll()) != null) { try { ((ByteBuffer) req.getMessage()).release(); } catch (IllegalStateException e) { session.getFilterChain().fireExceptionCaught(session, e); } finally { req.getFuture().setWritten(false); } } } }
Object message = writeRequest.getMessage();
@Override public void filterWrite(NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws Exception { Object message = writeRequest.getMessage(); if (message instanceof ByteBuffer) { nextFilter.filterWrite(session, writeRequest); return; } ProtocolEncoder encoder = getEncoder(session); ProtocolEncoderOutputImpl encoderOut = getEncoderOut(session, nextFilter, writeRequest); try { encoder.encode(session, message, encoderOut); encoderOut.flush(); nextFilter.filterWrite(session, new WriteRequest( new MessageByteBuffer(writeRequest.getMessage()), writeRequest.getFuture(), writeRequest.getDestination())); } catch (Throwable t) { ProtocolEncoderException pee; if (t instanceof ProtocolEncoderException) { pee = (ProtocolEncoderException) t; } else { pee = new ProtocolEncoderException(t); } throw pee; } }
@Override protected void doWrite(IoSession session, WriteRequest writeRequest) { DatagramSessionImpl s = (DatagramSessionImpl) session; Queue<WriteRequest> writeRequestQueue = s.getWriteRequestQueue(); // SocketIoProcessor.doFlush() will reset it after write is finished // because the buffer will be passed with messageSent event. ByteBuffer buffer = (ByteBuffer) writeRequest.getMessage(); buffer.mark(); int remaining = buffer.remaining(); if (remaining == 0) { s.increaseScheduledWriteRequests(); } else { s.increaseScheduledWriteBytes(buffer.remaining()); } writeRequestQueue.add(writeRequest); if (session.getTrafficMask().isWritable()) { s.getManagerDelegate().flushSession(s); } }
@Override protected void doWrite(IoSession session, WriteRequest writeRequest) { SocketSessionImpl s = (SocketSessionImpl) session; Queue<WriteRequest> writeRequestQueue = s.getWriteRequestQueue(); // SocketIoProcessor.doFlush() will reset it after write is finished // because the buffer will be passed with messageSent event. ByteBuffer buffer = (ByteBuffer) writeRequest.getMessage(); buffer.mark(); int remaining = buffer.remaining(); if (remaining == 0) { s.increaseScheduledWriteRequests(); } else { s.increaseScheduledWriteBytes(buffer.remaining()); } writeRequestQueue.add(writeRequest); if (session.getTrafficMask().isWritable()) { s.getIoProcessor().flush(s); } }
public void fireMessageSent(IoSession session, WriteRequest request) { try { request.getFuture().setWritten(true); } catch (Throwable t) { fireExceptionCaught(session, t); } Entry head = this.head; callNextMessageSent(head, session, request.getMessage()); }