docs: protected void _disconnect() {
      IoSession currentSession = this.session;
      this.session = null;
      this.sentHandshake = null;
      this.receivedHandshake = null;
      this.attributeAliasValues.clear();
      this.originAliasValues.clear();
  
      if (currentSession != null && !currentSession.isClosing()) {
  
        log.info(
            "Closing connection to World Model (client) at {} (waiting {}ms).",
            currentSession.getRemoteAddress(),
            Long.valueOf(this.connectionTimeout));
        while (!currentSession.close(false).awaitUninterruptibly(
            this.connectionTimeout)) {
          log.error("Connection didn't close after {}ms.",
              Long.valueOf(this.connectionTimeout));
        }
      }
  
      if (currentSession != null) {
        for (ConnectionListener listener : this.connectionListeners) {
          listener.connectionInterrupted(this);
        }
      }
    }