0

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

您可以发布示例 xmpp4r 代码来执行此操作吗?

这是我的用例:

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

  2. 否则,电子邮件联系

以下是我有工作代码的事情:

  1. 发送各种类型的消息

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

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

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

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

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

  3. 否则,发送电子邮件

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

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

如果这确实是这样做的方法:

  1. 我可以获得一些示例代码,说明如何在通过 xmpp4r 登录时收集所有“我在这里”的存在确认信息吗?

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

4

1 回答 1

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

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

于 2013-05-13T15:57:13.240 回答