2012-03-29 2 views
1

Я хочу получить список всех (активных) ресурсов человека в моем списке. Так, например, «[email protected]» Я хотел бы получить что-то вроде {'gmail', 'pidgin'}, если этот пользователь в настоящий момент был зарегистрирован через GMail ('[email protected]/gmail') и Pidgin.Получить список всех ресурсов записи в реестре

Возможно ли это с помощью Smack? Я знаю, что некоторые клиенты показывают эту информацию и, например, XMPPHP поддерживает что-то вроде getResources(), но XMPPHP предназначен для PHP и не работает для Google Talk, так что это не очень помогает.

С наилучшими пожеланиями

ответ

3

с привкусом вам необходимо отслеживать пакеты присутствия, как они получены. «From» из полученных пакетов будет содержать ресурсы для JID пользователей.

Например:

private XMPPConnection connection; 
private PresenceListener listener = new PresenceListener(); 

public void setConnection(XMPPConnection connection) { 
    this.connection = connection; 
} 

public void createPresenceListener() { 
    connection.addPacketListener(listener, new PacketTypeFilter(Presence.class)); 
} 

public static class PresenceListener implements PacketListener { 
    public void processPacket(Packet packet) { 
     Presence presence = (Presence) packet; 
     if (presence.getType() == null || presence.getType() == Presence.Type.available) { 
      String from = presence.getFrom(); 
      if (from != null && from.lastIndexOf("/") > 0) { 
       String resource = from.substring(from.lastIndexOf("/") + 1); 
       // from here you can track all active resources 
      } 
     } 

    } 
} 
+0

Великий, это работает - большое спасибо! –