in core/src/main/java/org/apache/mina/session/AbstractIoSession.java [253:326]
public void changeState(SessionState to) {
try {
stateWriteLock.lock();
switch (state) {
case CREATED:
switch (to) {
case CONNECTED:
case SECURING:
case CLOSING:
state = to;
break;
default:
throw new IllegalStateException("Cannot transit from " + state + " to " + to);
}
break;
case CONNECTED:
switch (to) {
case SECURING:
case CLOSING:
state = to;
break;
default:
throw new IllegalStateException("Cannot transit from " + state + " to " + to);
}
break;
case SECURING:
switch (to) {
case SECURED:
case CLOSING:
state = to;
break;
default:
throw new IllegalStateException("Cannot transit from " + state + " to " + to);
}
break;
case SECURED:
switch (to) {
case CONNECTED:
case SECURING:
case CLOSING:
state = to;
break;
default:
throw new IllegalStateException("Cannot transit from " + state + " to " + to);
}
break;
case CLOSING:
if (to != SessionState.CLOSED) {
throw new IllegalStateException("Cannot transit from " + state + " to " + to);
}
state = to;
break;
case CLOSED:
throw new IllegalStateException("The session is already closed. cannot switch to " + to);
}
} finally {
stateWriteLock.unlock();
}
}