agsxmpp c mysql_使用agsXMPP查询聊天室内联系人

本文介绍了如何使用XMPP协议的XEP-0045和XEP-0030文档来查询多用户聊天室(MUC)的成员信息。通过发送disco#items查询,获取聊天室成员列表。即使面对私有房间,也能处理空查询响应。示例代码展示了使用agsXMPP库进行查询和结果处理的方法。
摘要由CSDN通过智能技术生成

项目中有这么一个需求:

1. 间隔一分钟,查询XMPP服务器,获取在某个聊天室中的成员信息

2. 获取查询结果,做相应处理

查询XMPP协议,发现XEP-0045文档有做相关的协议说明:http://xmpp.org/extensions/xep-0045.html#disco-roomitems ,用到的是多用户聊天室(MUC)的discovery操作,对应的Namespace Uri为:

http://jabber.org/protocol/disco#items

查询消息定义:

id='message id'

to='roomJid'

type='get'>

正常的查询结果消息格式定义:

id='message id'

to='you jid'

type='result'>

如果该房间是私有房间,按照XEP-0030文档协议,可能返回的消息是一个空查询:

id='message id'

to='you jid'

type='result'>

通用的做法是拼接XML,然后发送,然后处理Iq到达消息。不同的库封装方法可能不一样,但是底层发送出去时,必然都是一样的XML文本。

我用的XMPP库是agsXMPP,具体的实现代码如下:

查询:

Jid roomJid = new Jid("roomName","domain.com");

///

/// 查询聊天室内成员

///

private void QueryMembers()

{

DiscoItemsIq discoItemIq = new DiscoItemsIq(IqType.get)

discoItemIq.To = roomJid;

xmppConnection.IqGrabber.SendIq(discoItemIq , new IqCB(QueryIqHandler), null);

//更简单的操作:DiscoManager discoM = new DiscoManager(xmppConnection);

//discoM.DiscoverItems(roomJid, new IqCB(QueryIqHandler), null );

}

///

/// 处理查询结果

///

///

///

///

private void QueryIqHandler(object sender ,IQ iq, object data)

{

if(iq.Type == IqType.result)

{

DiscoItems items = iq.SelectSingleElement();

foreach(DiscoItem item in items.GetDiscoItems())

{

//roomJid = item.Jid.Bare;

//memberNick = item.Jid.Resource;

//other process...

}

}

}

记录XMPP学习过程....

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值