Strophe 监听presence疑问

wonailmy 发布于 2015/11/28 18:07
阅读 966
收藏 0

开源软件供应链点亮计划,等你来!>>>

最近在打算弄一个基于WEB的IM系统.现在用的是openfire+StropheJS.

提前粗略的了解了下XMPP,然后开始动手写代码来进一步学习.现在遇见了一些问题,希望懂的大神们来指教一二.


//登录成功
self.connection.rawInput = function(a){
	console.dir(a)
}//connection接收的任何传输将被此方法拦截
/**
 * 事件监听处理
 * addHandler: function (handler,ns,name,type,id,from,options)
 * handler:回调函数
 * ns:命名空间(xmlns属性的值)
 * name:需要监听的节点
 * type:节点的类型
 * id:节点ID
 * from:来自于哪里的节点
 * options:监听配置
 */
self.connection.addHandler(self.onMessage, null, 'message', null, null, null);
self.connection.addHandler(self.onPresenceOn,"jabber:client","presence",null, null,null);//监听好友上线线通知
self.connection.addHandler(self.onPresenceOff,"jabber:client","presence","unavailable", null,null);//监听好友下线通知
self.connection.send($pres().tree());//像服务器发送一个状态信息
self.fireEvent("loginSuccess");
以上是一段登录成功后的代码,一切OK的.
self.connection.send($pres().tree())

而这段代码就是告诉服务器发送一个状态,发送到服务器的数据为:


<presence xmlns='jabber:client'/>


接下来就出现问题了:

我现在有2个账户,双方都已订阅,订阅方式为from,如图:

我要达到的目的很简单,双方有人上线/下线提示下就是.这部分我用的是监听.

self.connection.addHandler(self.onPresenceOn,"jabber:client","presence",null, null,null);//监听好友上线线通知
self.connection.addHandler(self.onPresenceOff,"jabber:client","presence","unavailable", null,null);//监听好友下线通知
A用户离线的时候.如果B用户在线,能收到他的离线通知.但是A上线的时候,B怎么也收不到.但是通过我的拦截发现B是收到这条数据的,但我的监听没有触发.B收到的数据为以下:

<presence xmlns="jabber:client" from="tls@wonailmy.local/9faae4aa" to="lmy@wonailmy.local"></presence>



加载中
OSCHINA
登录后可查看更多优质内容
返回顶部
顶部