afsdfdlecosdfsfdcco
23-09-2007, 14:42
Allora, sto realizzando un semplice client jabber in java usando la libreria SMACK ma ho trovato un problemino...
Il codice è questo:
connection = new XMPPConnection(data.getServer());
connection.connect();
connection.login(data.getUsername(), data.getPassword());
roster = connection.getRoster(); // ottengo la lista contatti
System.out.println("numero utenti: " + roster.getEntryCount());
// itero i singoli utenti
Iterator<RosterEntry> iter = roster.getEntries().iterator();
while (iter.hasNext())
{
RosterEntry entry = (RosterEntry) iter.next();
String user = entry.getUser();
Presence presence = roster.getPresence(user);
if (presence.isAvailable())
{
System.out.println(user + " e' online");
}
else
{
System.out.println(user + " e' offline");
}
}
Dopo il login ottengo la lista contatti e controllo uno per uno lo stato. Il problema è che la lista la ottengo subito mentre lo stato arriva dopo!
Mi spiego meglio: con questo codice i contatti jabber li vedo TUTTI OFFLINE (anche se non è vero). Se pero' metto 4 o 5 secondi di sleep subito dopo "roster = connection.getRoster();" i contatti online vengono visti correttamente.
Ora. Come posso fare per "bloccare" il programma mentre aspetto che tutti gli stati dei contatti vengano rilevati correttamente?
Grazie 1000 :)
Il codice è questo:
connection = new XMPPConnection(data.getServer());
connection.connect();
connection.login(data.getUsername(), data.getPassword());
roster = connection.getRoster(); // ottengo la lista contatti
System.out.println("numero utenti: " + roster.getEntryCount());
// itero i singoli utenti
Iterator<RosterEntry> iter = roster.getEntries().iterator();
while (iter.hasNext())
{
RosterEntry entry = (RosterEntry) iter.next();
String user = entry.getUser();
Presence presence = roster.getPresence(user);
if (presence.isAvailable())
{
System.out.println(user + " e' online");
}
else
{
System.out.println(user + " e' offline");
}
}
Dopo il login ottengo la lista contatti e controllo uno per uno lo stato. Il problema è che la lista la ottengo subito mentre lo stato arriva dopo!
Mi spiego meglio: con questo codice i contatti jabber li vedo TUTTI OFFLINE (anche se non è vero). Se pero' metto 4 o 5 secondi di sleep subito dopo "roster = connection.getRoster();" i contatti online vengono visti correttamente.
Ora. Come posso fare per "bloccare" il programma mentre aspetto che tutti gli stati dei contatti vengano rilevati correttamente?
Grazie 1000 :)