处理基于 Strope.js 的聊天应用程序中的状态

2024-03-22

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

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


通过使用 Strope,您可以将 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;
}

你可以检查Strope.js文档 http://strophe.im/strophejs/doc/1.0.2/files2/strophe-js.html#Strophe.Connection.sendIQ了解更多信息。使用 sendIQ,您可以添加更多参数,例如错误回调等。

希望这可以帮助!

Edit:

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

In the XMPP 文档 http://xmpp.org/rfcs/rfc3921.html:

2.2.1.存在类型

存在节的“type”属性是可选的。存在 不具有“type”属性的节用于向 发送者在线并且可以通信的服务器。 如果包含,“type”属性指定缺乏可用性,a 请求管理对另一个实体的存在的订阅, 请求另一个实体的当前存在,或与以下相关的错误 先前发送的存在节。如果包含,则“type”属性 必须具有以下值之一:

  • 不可用——表示该实体不再可用 沟通。
  • 订阅——发送者希望订阅 收件人的存在。
  • 已订阅——发件人已允许 接收者接收他们的存在。
  • 取消订阅——发件人是 取消订阅另一个实体的存在。
  • 取消订阅—— 订阅请求已被拒绝或先前已授予 订阅已被取消。 ETC...

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

2.2.2.1.展示

OPTIONAL 元素包含非人类可读的 XML 字符 指定实体特定可用性状态的数据或 具体资源。存在节不得包含多个 元素。该元素不得拥有任何属性。 如果提供,XML 字符数据值必须是以下之一 (其他可用性类型可以通过 存在节的正确命名空间的子元素):

  • 离开——实体或资源暂时离开。
  • 聊天——实体或资源对聊天非常感兴趣。
  • dnd——实体或资源正忙(dnd =“请勿打扰”)。
  • xa——实体或资源长时间离开(xa =“eXtending Away”)。

如果未提供 show 元素,则假定实体处于在线状态并且 可用的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

处理基于 Strope.js 的聊天应用程序中的状态 的相关文章

随机推荐