XMPP与Strophe的客户之间的IQ交换

时间:2012-03-26 09:03:37

标签: javascript xmpp strophe

所以我有2个浏览器在运行,两个页面都在同一个页面上。在此页面中,您可以使用帐户登录服务器。

使用Strophe构建连接。一切都是HTML和javascript。

现在我已经设法建立了一个聊天(在两个浏览器之间,每个浏览器都有不同的用户登录)。这完美无缺。

我现在想要实现的是将IQ发送给另一个用户。两人都在状态栏中说他们正在接收智商(其中一个是'得到了请求'另一个是'得到了结果')

现在,我用:

创建我的iq
    var iq = $iq({type: 'get', to: this.receiver}).c('query', {xmlns: 'http://jabber.org/protocol/pubsub#retrieve-subscriptions'});
    XmppObject.xmpp.connection.sendIQ(iq);

这是在一个可以通过按下按钮调用的功能中设置的。 监听器的构建如下:

    $(XmppObject.xmpp).bind("iq", function(event, data){
    addToStatus('Received an iq: \n');
    handlePong(data.iq);
});

使用handlePong:

    function handlePong(msg)
{
    var objMsg = $(msg);
    var from = objMsg.attr('from');
    var type = objMsg.attr('type');
    var id = objMsg.attr('id');
    var text = 'Received iq from ' + from + ' with id ' + id + ' and type ' + type + '\n\n';
    addToStatus(text);
}

现在,当client1向客户端2发送IQ时,结果是:

客户端1: Received iq from client2@domain with id pingPong and type result

客户机2:

现在有没有办法在client2的状态下显示他得到了初始请求?

1 个答案:

答案 0 :(得分:3)

您需要:

  • 使用您自己的命名空间构建iq,您不能简单地回收现有命名空间。它会起作用,但这是完全错误的。
  • 在Strophe的连接上添加处理程序以处理此类型,如果iq。你不是通过使用jQuery的绑定来做到这一点。您应该使用连接上的addHandler

我能找到的最简单的例子是strophe插件的ping实现,请参阅https://github.com/metajack/strophejs-plugins/blob/master/ping/strophe.ping.js