protected IdleTimeoutConduit createIdleTimeoutChannel(StreamConnection connectedStreamChannel) { return new IdleTimeoutConduit(connectedStreamChannel); }
@Override public void run() { handle = null; if(expireTime == -1) { return; } long current = System.currentTimeMillis(); if(current < expireTime) { //timeout has been bumped, re-schedule handle = WorkerUtils.executeAfter(getWriteThread(), timeoutCommand, (expireTime - current) + DELTA, TimeUnit.MILLISECONDS); return; } UndertowLogger.REQUEST_LOGGER.trace("Timing out channel due to inactivity"); timedOut = true; doClose(); if (sink.isWriteResumed()) { if(writeReadyHandler != null) { writeReadyHandler.writeReady(); } } if (source.isReadResumed()) { if(readReadyHandler != null) { readReadyHandler.readReady(); } } } };
private void handleResumeTimeout() { long timeout = getIdleTimeout(); if (timeout <= 0) { return; } long currentTime = System.currentTimeMillis(); long newExpireTime = currentTime + timeout; boolean shorter = newExpireTime < expireTime; if(shorter && handle != null) { handle.remove(); handle = null; } expireTime = newExpireTime; XnioExecutor.Key key = handle; if (key == null) { handle = WorkerUtils.executeAfter(getWriteThread(), timeoutCommand, timeout, TimeUnit.MILLISECONDS); } }
public void setIdleTimeout(long idleTimeout) { this.idleTimeout = idleTimeout; if(idleTimeout > 0) { expireTime = System.currentTimeMillis() + idleTimeout; if(isReadResumed() || isWriteResumed()) { handleResumeTimeout(); } } else { expireTime = -1; } } }
@Override public long write(ByteBuffer[] srcs, int offset, int length) throws IOException { handleIdleTimeout(); long w = sink.write(srcs, offset, length); return w; }
@Override public void resumeReads() { source.resumeReads(); handleResumeTimeout(); }
@Override public void suspendWrites() { sink.suspendWrites(); XnioExecutor.Key handle = this.handle; if(handle != null && !isReadResumed()) { handle.remove(); this.handle = null; } }
@Override public void suspendReads() { source.suspendReads(); XnioExecutor.Key handle = this.handle; if(handle != null && !isWriteResumed()) { handle.remove(); this.handle = null; } }
public void setIdleTimeout(long timeout) { idleTimeoutConduit.setIdleTimeout(timeout); }
public long getIdleTimeout() { return idleTimeoutConduit.getIdleTimeout(); }
private void handleIdleTimeout() throws ClosedChannelException { if(timedOut) { return; } long idleTimeout = this.idleTimeout; if(idleTimeout <= 0) { return; } long currentTime = System.currentTimeMillis(); long expireTimeVar = expireTime; if(expireTimeVar != -1 && currentTime > expireTimeVar) { timedOut = true; doClose(); throw new ClosedChannelException(); } expireTime = currentTime + idleTimeout; }
@Override public int write(ByteBuffer src) throws IOException { handleIdleTimeout(); int w = sink.write(src); return w; }
public void setIdleTimeout(long idleTimeout) { this.idleTimeout = idleTimeout; if(idleTimeout > 0) { expireTime = System.currentTimeMillis() + idleTimeout; if(isReadResumed() || isWriteResumed()) { handleResumeTimeout(); } } else { expireTime = -1; } } }
@Override public void wakeupReads() { source.wakeupReads(); handleResumeTimeout(); } @Override
@Override public void suspendWrites() { sink.suspendWrites(); XnioExecutor.Key handle = this.handle; if(handle != null && !isReadResumed()) { handle.remove(); this.handle = null; } }
@Override public void suspendReads() { source.suspendReads(); XnioExecutor.Key handle = this.handle; if(handle != null && !isWriteResumed()) { handle.remove(); this.handle = null; } }
public void setIdleTimeout(long timeout) { idleTimeoutConduit.setIdleTimeout(timeout); }
public long getIdleTimeout() { return idleTimeoutConduit.getIdleTimeout(); }