如何使用xmpp4r检测给定Jabber ID的在线/离线状态?

时间:2013-05-13 13:20:44

标签: ruby xmpp xmpp4r

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

你可以发布样本xmpp4r代码吗?

这是我的用例:

  1. 如果在线联系,请发送:正常消息

  2. 否则,请发送电子邮件联系

  3. 以下是我使用的代码:

    1. 发送各种类型的消息

    2. 获取名单/联系人列表

    3. 注册回拨以检测在场状态的变化

    4. 但是,我找不到直接解决这样工作流程的地方:

      1. 循环播放名单中的每个JID

      2. 如果是jid.is_online? == true,发送IM

      3. 否则,请发送电子邮件

      4. 我已经读过你应该向JID发送一个类型为:headline的消息,如果失败,你知道用户是离线的。在我的测试中,如果用户处于联机状态,他们将收到标题类型的消息。这不是最理想的,因为用户应该只接收要读取的消息,而不是用于确定在线状态的噪声。

        我已经在登录时看到,您的所有联系人都会将状态退回给您,并且该状态是他们在线状态的唯一指示 - 假设您没有断开连接或状态改变'尚未收到。因此,您应该注册一个状态回叫,记录支持您的初始用户,然后根据您正在运行的名册状态回调在列表中添加或删除。

        如果这是真正的方法:

        1. 我可以通过xmpp4r获取一些示例代码,了解如何通过xmpp4r收集所有“我在这里”存在确认信息吗?

        2. 为什么,为什么,xmpp是这样设计的,为什么这比提供“is_online_and_available”方法更好?

1 个答案:

答案 0 :(得分:0)

所以这里的答案是添加一个消息回调并在块内检查类型:

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

这需要线程,因为您必须倾听响应。