获取名册条目的所有资源列表

Posted

技术标签:

【中文标题】获取名册条目的所有资源列表【英文标题】:Get list of all resources of roster entry 【发布时间】:2012-03-29 20:14:17 【问题描述】:

我想获取我名册中某个人的所有(活动)资源的列表。 因此,例如“user1@gmail.com”如果该用户当前通过 GMail ('user1@gmail.com/gmail') 和 Pidgin 登录,我想获得类似 'gmail', 'pidgin' 的信息。

Smack 可以做到这一点吗?我知道有些客户会显示这些信息,例如XMPphp 支持 getResources() 之类的东西,但 XMPPHP 是用于 PHP 的,不适用于 Google Talk,所以这对我没有多大帮助。

最好的问候

【问题讨论】:

【参考方案1】:

使用 Smack,您需要在收到 Presence 数据包时对其进行跟踪。接收到的数据包的“发件人”将包含用户 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
            
        

    

【讨论】:

以上是关于获取名册条目的所有资源列表的主要内容,如果未能解决你的问题,请参考以下文章

名册和存在

无法从 xmpphp 获取用户列表(名册)

所有 Azure 资源的 RBAC 权限列表

在 ejabberd 中添加共享名册中的所有用户

XMPPFramework - 如何接收名册的存在信息以及名册列表?

从类路径目录中获取资源列表