Получить список всех ресурсов записи в реестре - PullRequest
1 голос
/ 30 марта 2012

Я хочу получить список всех (активных) ресурсов человека в моем списке. Так, например, «user1@gmail.com» я хотел бы получить что-то вроде {'gmail', 'pidgin'}, если этот пользователь в данный момент вошел в систему через GMail ('user1@gmail.com/gmail') и Pidgin.

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

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

1 Ответ

3 голосов
/ 30 марта 2012

С помощью Smack вам нужно отслеживать пакеты присутствия по мере их получения. «От» полученных пакетов будет содержать ресурсы для 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
            }
        }

    }
}
...