如何使用 libstrophe 构建一个 jabber 客户端
Posted
技术标签:
【中文标题】如何使用 libstrophe 构建一个 jabber 客户端【英文标题】:How to build a jabber client using libstrophe 【发布时间】:2012-06-30 21:32:58 【问题描述】:我正在尝试使用 libstrophe 库制作一个简单的 Jabber 客户端。
到目前为止一切进展顺利,除了我需要澄清的一件事。
也就是说,我应该如何(持续地)知道联系人的状态(即在线/离线),以便我可以将其显示给我的程序的用户?同样,我应该如何请求用户名册?
我查看了 libstrophe 提供的 roster.c
示例,但只打印了一次名册。在一个真实的应用程序中,我需要不断地请求/更新它,以便在应用程序中显示用户添加的任何新联系人等。
因此,基本上,我不清楚如何确保始终在用户的联系人列表中显示最新的花名册和人员的最新状态。
例如,我是否应该在某个预定义的时间间隔请求名册?
【问题讨论】:
看起来您正在寻找“名册推送”:tools.ietf.org/html/draft-ietf-xmpp-3921bis-06#section-2.1.5 【参考方案1】:名册和出席是 2 个不同的主题。
当您登录时,您通常会请求您已经在做的花名册。当您的联系人列表在会话期间发生变化时,您会收到包含更新后联系人的名册推送。这是一个节。其他登录的客户是否操纵了我们您的客户的名册并不重要。
所有订阅的联系人都存在在线状态。
您必须使用 xmpp_handler_add 为
设置处理程序-
在线状态,存在节
名册推送,iq 节与命名空间 jabber:iq:roster 的查询
【讨论】:
为了获得名册推送,我会为jabber:iq:roster
注册一个处理程序。存在节的名称空间是什么? jabber:iq:presence
之类的东西?
presence 在标签 xmpp_handler_add(conn, presence_handler, "jabber:client", "presence", NULL, ctx);
但它永远不会被调用...不是在开始时(所以我得到初始存在信息),而不是当我的程序运行时有人注销时...
试试这个:xmpp_handler_add(conn, presence_handler, NULL, "presence", NULL, ctx);此处理程序不需要命名空间。
行得通,谢谢。对于另一个处理程序,我做了xmpp_handler_add(conn, roster_push_handler, "jabber:iq:roster", "iq", NULL, ctx);
,它似乎也可以工作。感谢您的回答,接受,+1,奖励赏金:)以上是关于如何使用 libstrophe 构建一个 jabber 客户端的主要内容,如果未能解决你的问题,请参考以下文章
phabricator bot json 配置文件中“join”和“notification.channels”字段的使用