【问题标题】:How Can I Use xmpp4r To Detect The Online/Offline Status Of A Given Jabber ID?如何使用 xmpp4r 检测给定 Jabber ID 的在线/离线状态?
【发布时间】:2013-05-07 13:11:24
【问题描述】:

在向他们发送消息之前知道给定联系人是否在线的正确 xmpp4r 方法是什么?

您可以发布示例 xmpp4r 代码吗?

这是我的用例:

  1. 如果在线联系,发送:普通消息

  2. 其他,电子邮件联系

以下是我的工作代码:

  1. 发送各种类型的消息

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

  3. 注册回调以检测存在的变化

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

  1. 遍历您名册中的每个 JID

  2. 如果 jid.is_online? == true,发送即时消息

  3. 否则,发送电子邮件

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

我了解到,在登录时,您的所有联系人都会向您回复在线状态,并且该状态是他们在线的唯一指示 - 假设您没有断开连接或在线状态更改”还没收到。因此,您应该注册一个在线回叫,记录回拨您的初始用户,然后根据您正在运行的名册在线回叫从列表中添加或删除。

如果这真的是这样做的方法:

  1. 我能否获取一些示例代码,说明如何在通过 xmpp4r 登录时收集所有“我在这里”存在确认?

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

【问题讨论】:

    标签: ruby xmpp xmpp4r


    【解决方案1】:

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

    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
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-13
      • 1970-01-01
      • 2018-10-20
      相关资源
      最近更新 更多