首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用xmpp4r检测给定Jabber ID的联机/脱机状态?

如何使用xmpp4r检测给定Jabber ID的联机/脱机状态?
EN

Stack Overflow用户
提问于 2013-05-13 13:20:44
回答 1查看 382关注 0票数 0

在发送消息之前,了解给定联系人是否在线的正确的xmpp4r方法是什么?

您可以发布用于此操作的示例xmpp4r代码吗?

这里是我的用例:

  1. 如果联机联系,发送:普通消息
  2. 否则,用电子邮件联系

下面是我的工作代码:

  1. 发送各种类型的消息
  2. 获得一份名册/联系人名单
  3. 注册回叫以检测存在的变化

但是,我找不到像这样直接处理工作流程的地方:

  1. 循环遍历名册中的每个JID
  2. 如果jid.is_online?==为真,请发送IM
  3. 否则,发电子邮件

我已经读过,您应该发送一个JID类型的消息:标题,如果失败,您知道用户离线。在我的测试中,如果用户在线,他们将收到一条标题类型的消息。这是次优的,因为用户应该只接收要读取的消息,而不是确定在线状态的噪音。

我看过,在登录的时候,你所有的联系人都会把你的存在状态反馈给你,而这种状态是他们在线的唯一迹象--假设你还没有收到任何断开或存在变化。因此,您应该注册一个存在回调,记录初始用户谁平您回来,然后添加或删除根据您正在运行的名册存在回调列表。

如果这真的是这样做的话:

  1. 我能得到一些示例代码吗?如何收集通过xmpp4r登录的所有“我在这里”的存在确认信息?
  2. 为什么,为什么xmpp是这样设计的,为什么这比提供一个"is_online_and_available“方法更好呢?
EN

回答 1

Stack Overflow用户

发布于 2013-05-13 15:57:13

因此,这里的答案是添加一个消息回调,并在块中检查类型:

代码语言:javascript
复制
m = Message.new(to, body)
cl.send(m)

cl.add_message_callback do |m|
  if m.type == :error
    puts "type: #{m.type}"
  else
    puts "not an error"
  end
end

这需要线程处理,因为您必须侦听响应。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16523113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档