in core/src/main/java/org/apache/mina/transport/nio/AbstractNioSession.java [121:158]
public IoFuture<Void> close(final boolean immediately) {
switch (state) {
case CREATED:
LOG.error("Session {} not opened", this);
throw new IllegalStateException("cannot close an not opened session");
case CONNECTED:
state = SessionState.CLOSING;
if (immediately) {
channelClose();
processSessionClosed();
} else {
if (isSecured()) {
SslHelper sslHelper = getAttribute(SSL_HELPER, null);
if (sslHelper != null) {
try {
sslHelper.close();
} catch (IOException e) {
processException(e);
}
}
}
// flush this session the flushing code will close the session
flushWriteQueue();
}
break;
case CLOSING:
// return the same future
LOG.warn("Already closing session {}", this);
break;
case CLOSED:
LOG.warn("Already closed session {}", this);
break;
default:
throw new IllegalStateException("not implemented session state : " + state);
}
return closeFuture;
}