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



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

你可以张贴示例xmpp4r代码做这个?

下面是我的用例:

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

  2. Else, email联系人

以下是我的工作代码:

  1. 发送各种类型的消息

  2. 获取花名册/联系人名单

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

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

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

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

  4. 否则,发送邮件

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

我读到过,在登录时,你所有的联系人都会向你反馈一个状态,这个状态是他们在线的唯一指示——假设你还没有收到断开或状态变化。因此,您应该注册一个状态回调,记录回调您的初始用户,然后根据您的运行花名册状态回调在列表中添加或删除。

如果真的是这样的话:

  1. 我可以得到一些示例代码如何收集所有的"我在这里"存在确认通过xmpp4r登录?

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

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

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

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

相关内容

  • 没有找到相关文章

最新更新