gpt4 book ai didi

ruby - 使用 xmpp4r Ruby gem,如何同步发现联系人是否在线?

转载 作者:太空宇宙 更新时间:2023-11-03 16:39:43 25 4
gpt4 key购买 nike

我是 XMPP 和 xmpp4r 库的新手,所以如果这在某处明显记录,请原谅我的菜鸟问题。

以同步方式查明给定 JID 是否在线的最直接方法是什么? (这样我就可以在 if 语句中调用类似 is_online?(jid) 的东西)

我的详细信息:

我正在编写一个 Sinatra 应用程序,当在 Web 服务器上请求特定 url 时,它将尝试向用户发送消息,但它应该只在用户当前在线时尝试向用户发送消息。弄清楚给定的 JID 是否在线是我的问题。

现在,我知道如果我连接并等待几秒钟让所有初始在线状态探测响应返回到花名册助手,那么我可以从我的花名册中检查任何这些在线状态并调用#online?在他们身上获得正确的值(value)。但是,我不知道何时发送了所有在线状态更新,所以那里存在竞争条件,有时调用 #online? 如果我只是没有,我名册中的在线状态将返回 false t 尚未收到存在探测响应。

因此,我目前的想法是,找出某人是否在线的最直接方法是构建一个新的类型为 :probe 的状态消息,并将其发送到我感兴趣的 JID。下面是我的方法我现在正在做:

#jabber is the result of Client::new
#email is the jid I'm interested in polling
def is_online?(jabber, email)
online = false
p = Presence.new
p.set_to(email)
p.set_from(jabber.jid)
p.set_type(:probe)
pres = jabber.send(p) do |returned_presence|
online = returned_presence.nil?
end

return online
end

现在,这适用于用户实际在线的情况,但当用户离线时,返回的在线状态探测消息似乎被其他一些 presence_callback 处理程序捕获我不知道如何处理它,而且我的 is_online? 函数永远不会完成返回值。

任何人都可以通过提供一个简单的示例 is_online 来帮助我吗?我可以调用的函数,或者为我指出正确的方向,以便在我尝试检查 #online?

的状态之前,如何检测名册何时完成获取所有初始状态更新

最佳答案

事实证明,没有一种同步方式来请求 JID 存在。您只需询问您想要什么,然后等待响应到达时触发响应处理程序。

关于ruby - 使用 xmpp4r Ruby gem,如何同步发现联系人是否在线?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1698377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com