public boolean logoff (boolean abortable)
    {
        // if we have no communicator, we're not logged on anyway
        if (_comm == null) {
            log.warning("Ignoring request to logoff because we're not logged on.");
            return true;
        }

        // if the request is abortable, let's run it past the observers before we act upon it
        final boolean[] rejected = new boolean[] { false };
        _observers.apply(new ObserverOps.Client(this) {
            @Override protected void notify (ClientObserver obs) {
                if (!obs.clientWillLogoff(_client)) {
                    rejected[0] = true;
                }
            }
        });
        if (abortable && rejected[0]) {
            return false;
        }

        // ask the communicator to send a logoff message and disconnect from the server
        _comm.logoff();

        return true;
    }
public boolean logoff ( boolean abortable ) { if ( _comm == null ) { log . warning ( "Ignoring request to logoff because we're not logged on." ) ; return true ; } final boolean [ ] rejected = new boolean [ ] { false } ; _observers . apply ( new ObserverOps . Client ( this ) { @ Override protected void notify ( ClientObserver obs ) { if ( ! obs . clientWillLogoff ( _client ) ) { rejected [ 0 ] = true ; } } } ) ; if ( abortable && rejected [ 0 ] ) { return false ; } _comm . logoff ( ) ; return true ; }
Requests that the client log off of the server to which it is connected.

@param abortable If true, the client will call <code>clientWillDisconnect</code> on all of
the client observers and abort the logoff process if any of them return false. If false,
<code>clientWillDisconnect</code> will not be called at all.

@return true if the logoff succeeded, false if it failed due to a disagreeable observer.