logger.debug("SEND[{}]: {} bytes: {}", new Object[]{ line.getSession().getId(), bytes.length, msg}); line.getSession().write(buffer).addListener(onWriteComplete); logger.debug("SEND[{}]: {} bytes: {}", new Object[]{ session.getId(), bytes.length, msg}); session.write(buffer).addListener(onWriteComplete);
private void writePersistentResponse(final IoSession parent, final CommitFuture commitFuture, HttpResponseMessage httpResponse) { WriteFuture writeFuture = parent.write(httpResponse); writeFuture.addListener(new IoFutureListener<WriteFuture>() { @Override public void operationComplete(WriteFuture future) { commitFuture.setCommited(); } }); }
@Override public void operationComplete(WriteFuture future) { if(listenerInvocationCount.get() < maximumStackDepth) { while(listenerInvocationCount.incrementAndGet() < maximumStackDepth) { if (remainingMessages.decrementAndGet() >= 0) { session.write(buf).addListener(this); } } } if (listenerPendingCount.decrementAndGet() <= 0) { listenerInvocationCount.set(0); listenerPendingCount.set(maximumStackDepth); if (remainingMessages.decrementAndGet() >= 0) { session.write(buf).addListener(this); } } } };
session.write(buf).addListener(listener);
writeRequest.getFuture().addListener(new IoFutureListener<IoFuture>() { @Override public void operationComplete(IoFuture future) {
public IoWriteFuture write(IoBuffer buffer) { Future future = new Future(sessionWriteId, null); session.write(buffer).addListener((IoFutureListener<WriteFuture>) cf -> { Throwable t = cf.getException(); if (t != null) { future.setException(t); } else { future.setWritten(); } }); return future; }
session.getTransportSession().write(closeMessage).addListener(new IoFutureListener<WriteFuture>() {
@Override public void filterWrite( NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws Exception { final IoEvent e = new IoEvent(IoEventType.WRITE, session, writeRequest); if (queueHandler.accept(this, e)) { nextFilter.filterWrite(session, writeRequest); WriteFuture writeFuture = writeRequest.getFuture(); if (writeFuture == null) { return; } // We can track the write request only when it has a future. queueHandler.offered(this, e); writeFuture.addListener(new IoFutureListener<WriteFuture>() { public void operationComplete(WriteFuture future) { queueHandler.polled(WriteRequestFilter.this, e); } }); } } }
/** * {@inheritDoc} */ @Override public void filterWrite(NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws Exception { final IoEvent e = new IoEvent(IoEventType.WRITE, session, writeRequest); if (queueHandler.accept(this, e)) { nextFilter.filterWrite(session, writeRequest); WriteFuture writeFuture = writeRequest.getFuture(); if (writeFuture == null) { return; } // We can track the write request only when it has a future. queueHandler.offered(this, e); writeFuture.addListener(new IoFutureListener<WriteFuture>() { /** * @inheritedDoc */ @Override public void operationComplete(WriteFuture future) { queueHandler.polled(WriteRequestFilter.this, e); } }); } } }
/** * {@inheritDoc} */ @Override public void filterWrite(NextFilter nextFilter, IoSession session, WriteRequest writeRequest) throws Exception { final IoEvent e = new IoEvent(IoEventType.WRITE, session, writeRequest); if (queueHandler.accept(this, e)) { nextFilter.filterWrite(session, writeRequest); WriteFuture writeFuture = writeRequest.getFuture(); if (writeFuture == null) { return; } // We can track the write request only when it has a future. queueHandler.offered(this, e); writeFuture.addListener(new IoFutureListener<WriteFuture>() { /** * @inheritedDoc */ @Override public void operationComplete(WriteFuture future) { queueHandler.polled(WriteRequestFilter.this, e); } }); } } }
@Override protected Object doFilterWriteHttpContent(NextFilter nextFilter, IoSessionEx session, WriteRequest writeRequest, HttpContentMessage httpContent) throws Exception { if (httpContent.isComplete()) { if (session.containsAttribute(CONNECTION_CLOSE_KEY)) { writeRequest.getFuture().addListener(new IoFutureListener<WriteFuture>() { @Override public void operationComplete(WriteFuture future) { IoSession session = future.getSession(); if (logger.isTraceEnabled()) { logger.trace(String.format("Closing session %s because of Connection: close header in HTTP request", session)); } // close on flush at server session.close(false); } }); } else { activateSessionIdleTimeout(session); } } return super.doFilterWriteHttpContent(nextFilter, session, writeRequest, httpContent); }
@Override public void filterClose(final NextFilter nextFilter, final IoSession session) throws SSLException { SslHandler handler = (SslHandler) session.getAttribute(SSL_HANDLER); if (handler == null) { // The connection might already have closed, or // SSL might have not started yet. nextFilter.filterClose(session); return; } WriteFuture future = null; try { synchronized (handler) { if (isSslStarted(session)) { future = initiateClosure(nextFilter, session); future.addListener(new IoFutureListener<IoFuture>() { @Override public void operationComplete(IoFuture future) { nextFilter.filterClose(session); } }); } } handler.flushScheduledEvents(); } finally { if (future == null) { nextFilter.filterClose(session); } } }
@Override public void filterClose(final NextFilter nextFilter, final IoSession session) throws SSLException { SslHandler handler = (SslHandler) session.getAttribute(SSL_HANDLER); if (handler == null) { // The connection might already have closed, or // SSL might have not started yet. nextFilter.filterClose(session); return; } WriteFuture future = null; try { synchronized (handler) { if (isSslStarted(session)) { future = initiateClosure(nextFilter, session); future.addListener(new IoFutureListener<IoFuture>() { public void operationComplete(IoFuture future) { nextFilter.filterClose(session); } }); } } handler.flushScheduledEvents(); } finally { if (future == null) { nextFilter.filterClose(session); } } }
if (isSslStarted(session)) { future = initiateClosure(nextFilter, session); future.addListener(new IoFutureListener<IoFuture>() { @Override public void operationComplete(IoFuture future) {
if (isSslStarted(session)) { future = initiateClosure(nextFilter, session); future.addListener(new IoFutureListener<IoFuture>() { @Override public void operationComplete(IoFuture future) {
private static void attachMessageSentInternal(final IoFilterChain filterChain, final IoBufferEx resetBuf, final WriteRequest request, WriteFuture future) { if (future.isDone()) { if (future.isWritten()) { resetBuf.reset(); // Complete the future without firing the (largely useless) messageSent event, to gain performance setFutureWritten(filterChain, request.getFuture()); //filterChain.fireMessageSent(request); } else { request.getFuture().setException(future.getException()); } } else { future.addListener(new IoFutureListener<WriteFuture>() { @Override public void operationComplete(WriteFuture parentFuture) { if (parentFuture.isWritten()) { resetBuf.reset(); // Complete the future without firing the (largely useless) messageSent event, to gain performance setFutureWritten(filterChain, request.getFuture()); //filterChain.fireMessageSent(request); } else { request.getFuture().setException(parentFuture.getException()); } } }); } }
return new ErrorRpcFuture(ex, locker); f.addListener(locker); return new RpcFutureImpl(locker);
@Override public void flush(IoSessionAdapterEx session) { IoSession parent = (IoSession) session.getAttribute(PARENT_KEY); WriteRequest req = session.getWriteRequestQueue().poll(session); // Check that the request is not null. If the session has been closed, // we may not have any pending requests. if (req != null) { final WriteFuture tcpBridgeWriteFuture = req.getFuture(); Object m = req.getMessage(); if (m instanceof IoBufferEx && ((IoBufferEx) m).remaining() == 0) { session.setCurrentWriteRequest(null); tcpBridgeWriteFuture.setWritten(); } else { WriteFuture parentWriteFuture = parent.write(m); parentWriteFuture.addListener(new IoFutureListener<WriteFuture>() { @Override public void operationComplete(WriteFuture future) { if (future.isWritten()) { tcpBridgeWriteFuture.setWritten(); } else { tcpBridgeWriteFuture.setException(future.getException()); } } }); } } }
@Override public void flush(IoSessionAdapterEx session) { IoSession parent = (IoSession) session.getAttribute(AbstractNioConnector.PARENT_KEY); WriteRequest req = session.getWriteRequestQueue().poll(session); // Chek that the request is not null. If the session has been closed, // we may not have any pending requests. if (req != null) { final WriteFuture tcpBridgeWriteFuture = req.getFuture(); Object m = req.getMessage(); if (m instanceof IoBufferEx && ((IoBufferEx) m).remaining() == 0) { session.setCurrentWriteRequest(null); tcpBridgeWriteFuture.setWritten(); } else { WriteFuture parentWriteFuture = parent.write(m); parentWriteFuture.addListener(new IoFutureListener<WriteFuture>() { @Override public void operationComplete(WriteFuture future) { if (future.isWritten()) { tcpBridgeWriteFuture.setWritten(); } else { tcpBridgeWriteFuture.setException(future.getException()); } } }); } } }
@Override protected void doFilterWrite(final NextFilter nextFilter, final WsnSession wsnSession, WriteRequest writeRequest) throws Exception { IoSession parent = wsnSession.getParent(); Encoding encoding = (Encoding) parent.getAttribute("encoding"); final WsMessage emptyWsMessage; final IoBufferAllocatorEx<?> allocator = wsnSession.getBufferAllocator(); switch(encoding) { case TEXT: emptyWsMessage = new WsTextMessage(allocator.wrap(allocator.allocate(0))); break; default: emptyWsMessage = new WsBinaryMessage(allocator.wrap(allocator.allocate(0))); } writeRequest.getFuture().addListener(new IoFutureListener<WriteFuture>() { @Override public void operationComplete(WriteFuture future) { if (logger.isDebugEnabled()) { logger.debug("HttpEmptyPacketWriterFilter writing empty packet."); } wsnSession.getParent().write(emptyWsMessage); } }); HttpResponseMessage message = (HttpResponseMessage) writeRequest.getMessage(); if ( message.getStatus() != HttpStatus.CLIENT_UNAUTHORIZED) { wsnSession.getFilterChain().remove(HttpEmptyPacketWriterFilter.this); } nextFilter.filterWrite(wsnSession, writeRequest); }