synchronized public void startup ( ) throws XMPPException { final List < Exception > errors = new LinkedList < Exception > ( ) ; AbstractConnectionListener connectionErrorListener = new AbstractConnectionListener ( ) { @ Override public void connectionClosedOnError ( Exception e ) { errors . add ( e ) ; } } ; connection . addConnectionListener ( connectionErrorListener ) ; readerThread . start ( ) ; // Wait for stream tag before returning. We'll wait a couple of seconds // before // giving up and throwing an error. try { // A waiting thread may be woken up before the wait time or a notify // (although this is a rare thing). Therefore, we continue waiting // until either a connectionID has been set (and hence a notify was // made) or the total wait time has elapsed. int waitTime = SmackConfiguration . getPacketReplyTimeout ( ) ; wait ( 3 * waitTime ) ; } catch ( InterruptedException ie ) { // Ignore. } connection . removeConnectionListener ( connectionErrorListener ) ; if ( connectionID == null ) { throw new XMPPException ( "Connection failed. No response from server." ) ; } else if ( ! errors . isEmpty ( ) ) { throw new XMPPException ( errors . iterator ( ) . next ( ) ) ; } else { connection . connectionID = connectionID ; } }
Starts the packet reader thread and returns once a connection to the server has been established . A connection will be attempted for a maximum of five seconds . An XMPPException will be thrown if the connection fails .