nextFilter.messageSent(session, inputStream); } else { nextFilter.filterWrite(session, new WriteRequest(byteBuffer));
break; ByteBuffer buf = (ByteBuffer) req.getMessage(); if (buf.remaining() == 0) { SocketAddress destination = req.getDestination(); if (destination == null) { destination = session.getRemoteAddress();
Object message = writeRequest.getMessage(); if (byteBuffer == null) { writeRequest.getFuture().setWritten(true); nextFilter.messageSent(session, message); } else { session.setAttribute(CURRENT_STREAM, inputStream); session.setAttribute(INITIAL_WRITE_FUTURE, writeRequest .getFuture()); nextFilter.filterWrite(session, new WriteRequest(byteBuffer));
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(); writeRequest.getFuture().setWritten(false);
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); } } } }
@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); } }
/** * Implement this method to perform real write operation with * the specified <code>writeRequest</code>. * * By default, this method is implemented to set the future to * 'not written' immediately. * * @param writeRequest Write request to make */ protected void write0(WriteRequest writeRequest) { writeRequest.getFuture().setWritten(false); }
@Override protected WriteFuture doFlush(ByteBuffer buf) { WriteFuture future = new DefaultWriteFuture(session); nextFilter.filterWrite(session, new WriteRequest( new HiddenByteBuffer(buf), future, writeRequest .getDestination())); return future; } }
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()); }
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); } }
private void callPreviousFilterWrite(Entry entry, IoSession session, WriteRequest writeRequest) { try { entry.getFilter().filterWrite(entry.getNextFilter(), session, writeRequest); } catch (Throwable e) { writeRequest.getFuture().setWritten(false); fireExceptionCaught(session, e); } }
public WriteFuture write(Object message, SocketAddress remoteAddress) { if (isClosing() ) { return DefaultWriteFuture.newNotWrittenFuture(this); } WriteFuture future = new DefaultWriteFuture(this); write0(new WriteRequest(message, future, remoteAddress)); return future; }