/** @param error null if connection is closed by user */ void logoutImpl(Exception error) { synchronized (this) { if (isLoggedIn()) { loggedIn.set(false); LOG.infof( "disconnecting from {0} at {1}:{2} ...", connection.getServiceName(), connection.getHost(), connection.getPort()); connection.disconnect(); synchronized (friends) { friends.clear(); } XMPPConnection.removeConnectionCreationListener(smackConnectionListener); connection = null; LOG.info("disconnected."); connectionMulticaster.broadcast( new FriendConnectionEvent( XMPPFriendConnectionImpl.this, FriendConnectionEvent.Type.DISCONNECTED, error)); ChatStateManager.remove(connection); if (discoInfoListener != null) { discoInfoListener.cleanup(); } if (noSaveFeatureInitializer != null) { noSaveFeatureInitializer.cleanup(); } if (idleStatusMonitor != null) { idleStatusMonitor.stop(); } if (xmppActivityListener != null) { xmppActivitySupport.removeListener(xmppActivityListener); } featureRegistry.deregisterInitializer(NoSaveFeature.ID); } } }
public static String jidForConnection(XMPPConnection c, String resource) { return c.getUser() + "@" + c.getHost() + (resource == null ? "" : "/" + resource); }