We are writing a client on top of Smack and find it very useful to be able to tell when the a connection has completed the authentication with the server. Since we support many simultaneous connections we really only want to make the session “real” once it has been authenticated.
To do this we have done defined
public interface ConnectionListener2 extends ConnectionListener {
/**
- Notification that the connection has been authenticated.
*/
public void connectionAuthenticated();
and updated PacketReader to implement the new interface with
/**
-
Sends out a notification that there was an error with the connection
-
and closes the connection.
- @param e the exception that causes the connection close event.
*/
void notifyConnectionAuthenticated() {
ArrayList listenersCopy;
synchronized (connectionListeners) {
// Make a copy since it’'s possible that a listener will be removed from the list
listenersCopy = new ArrayList(connectionListeners);
for (Iterator i=listenersCopy.iterator(); i.hasNext(); ) {
ConnectionListener listener = (ConnectionListener)i.next();
if (listener instanceof ConnectionListener2)
((ConnectionListener2)listener).connectionAuthenticated();
}
}
}
This method is called from XMPPConnection.login() and loginAnonymously() just after
authenticated = true.
The change is modest and greatly simplified our user interface.
Jeff
p.s., I would open a bug/enhancement but can’'t for the life of me figure out how to do so in the bug system.