1
0
Fork 0
mirror of https://codeberg.org/Mercury-IM/Smack synced 2024-11-16 20:22:05 +01:00

UNDO: The connection's roster can be accessed before the user actually logs in

git-svn-id: http://svn.igniterealtime.org/svn/repos/smack/trunk@2209 b35dd754-fafc-0310-a699-88a17e54d16e
This commit is contained in:
Gaston Dombiak 2004-01-18 12:58:36 +00:00 committed by gdombiak
parent ba65acf8c5
commit 72af76ba39

View file

@ -323,7 +323,8 @@ public class XMPPConnection {
// We're done with the collector, so explicitly cancel it. // We're done with the collector, so explicitly cancel it.
collector.cancel(); collector.cancel();
// Load the entire roster from the server. // Create the roster.
this.roster = new Roster(this);
roster.reload(); roster.reload();
// Set presence to online. // Set presence to online.
@ -402,17 +403,31 @@ public class XMPPConnection {
/** /**
* Returns the roster for the user logged into the server. If the user has not yet * Returns the roster for the user logged into the server. If the user has not yet
* logged into the server this method will return a non-loaded roster that the user can * logged into the server (or if the user is logged in anonymously), this method will return
* configure. If the user is logged in anonymously, this method will return
* <tt>null</tt>. * <tt>null</tt>.
* *
* @return the user's roster, a non-loaded roster if the user has not yet * @return the user's roster, or <tt>null</tt> if the user has not logged in yet.
* logged in, or <tt>null</tt> if the user is logged in anonymously.
*/ */
public Roster getRoster() { public Roster getRoster() {
if (roster == null) { if (roster == null) {
return null; return null;
} }
// If this is the first time the user has asked for the roster after calling
// login, we want to wait up to 2 seconds for the server to send back the
// user's roster. This behavior shields API users from having to worry about the
// fact that roster operations are asynchronous, although they'll still have to
// listen for changes to the roster. Note: because of this waiting logic, internal
// Smack code should be wary about calling the getRoster method, and may need to
// access the roster object directly.
int elapsed = 0;
while (!roster.rosterInitialized && elapsed <= 2000) {
try {
Thread.sleep(500);
}
catch (Exception e) {
}
elapsed += 500;
}
return roster; return roster;
} }
@ -720,9 +735,6 @@ public class XMPPConnection {
// Make note of the fact that we're now connected. // Make note of the fact that we're now connected.
connected = true; connected = true;
// Create the roster.
this.roster = new Roster(this);
// Notify that a new connection has been established // Notify that a new connection has been established
connectionEstablished(this); connectionEstablished(this);
} }