gpt4 book ai didi

javascript - 在基于 Strophe.js 的聊天应用程序中处理状态

转载 作者:数据小太阳 更新时间:2023-10-29 03:59:35 25 4
gpt4 key购买 nike

是否有任何现有解决方案可以为基于 Strophe.js 的聊天应用程序提供状态处理?

我有一个基于 Strophe.js 的简单聊天应用程序。我只想显示在线并动态更改列表的用户。我想知道是否有任何现有的解决方案(可能是 Strophe 插件)可以处理这个问题。如果没有这样的东西,实现它的最好/最简单的方法是什么?

最佳答案

通过使用 Strophe,您只需向您的服务器发送 IQ 请求您的名单,如下所示:

iq = $iq({type: 'get'}).c('query', {xmlns: 'jabber:iq:roster'});
App.connection.sendIQ(iq, your_roster_callback_function);

这会在您的服务器上查询您的花名册,并会返回一个包含您的花名册列表的对象。然后您可以像这样遍历您的花名册:

your_roster_callback_function(iq){
$(iq).find('item').each(function(){
var jid = $(this).attr('jid'); // The jabber_id of your contact
// You can probably put them in a unordered list and and use their jids as ids.
});
App.connection.addHandler(App.on_presence, null, "presence");
App.connection.send($pres());
}

请注意,我添加了一个 on_presence 回调和 connection.send($pres())。它的目的是让您可以在联系人的状态发生变化时从他们那里获得更新。您的状态回调将如下所示:

on_presence(presence){
var presence_type = $(presence).attr('type'); // unavailable, subscribed, etc...
var from = $(presence).attr('from'); // the jabber_id of the contact
if (presence_type != 'error'){
if (presence_type === 'unavailable'){
// Mark contact as offline
}else{
var show = $(presence).find("show").text(); // this is what gives away, dnd, etc.
if (show === 'chat' || show === ''){
// Mark contact as online
}else{
// etc...
}
}
}
return true;
}

您可以查看 Strophe.js documentation想要查询更多的信息。使用 sendIQ,您可以添加更多参数,例如错误回调等。

希望这对您有所帮助!

编辑:

对不起,我错了。 $(presence).attr('type') 不会告诉您联系人是否在线,但它会告诉您在线状态类型。状态类型实际上是一个信号,告诉您联系人是否不可用,或者您是否订阅、取消订阅等。

XMPP Documentation :

2.2.1. Types of Presence

The 'type' attribute of a presence stanza is OPTIONAL. A presence stanza that does not possess a 'type' attribute is used to signal to the server that the sender is online and available for communication. If included, the 'type' attribute specifies a lack of availability, a request to manage a subscription to another entity's presence, a request for another entity's current presence, or an error related to a previously-sent presence stanza. If included, the 'type' attribute MUST have one of the following values:

  • unavailable -- Signals that the entity is no longer available for communication.
  • subscribe -- The sender wishes to subscribe to the recipient's presence.
  • subscribed -- The sender has allowed the recipient to receive their presence.
  • unsubscribe -- The sender is unsubscribing from another entity's presence.
  • unsubscribed -- The subscription request has been denied or a previously-granted subscription has been cancelled. etc...

$(presence).find("show") 为您提供联系人的状态。来自文档:

2.2.2.1. Show

The OPTIONAL element contains non-human-readable XML character data that specifies the particular availability status of an entity or specific resource. A presence stanza MUST NOT contain more than one element. The element MUST NOT possess any attributes. If provided, the XML character data value MUST be one of the following (additional availability types could be defined through a properly-namespaced child element of the presence stanza):

  • away -- The entity or resource is temporarily away.
  • chat -- The entity or resource is actively interested in chatting.
  • dnd -- The entity or resource is busy (dnd = "Do Not Disturb").
  • xa -- The entity or resource is away for an extended period (xa = "eXtended Away").

If no show element is provided, the entity is assumed to be online and available.

关于javascript - 在基于 Strophe.js 的聊天应用程序中处理状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12062950/

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