您的位置:首页 > 运维架构

openfire xmpp 如何判断用户是否在线

2013-10-11 13:56 399 查看


想象中如此简单的功能,想不到却这般大费周折。

如要实现,必须先确保:

1. openfire中安装有“Presence” 插件。



2. 确保该插件设置可允许任何人访问(如果是跨域浏览的话)



然后通过如下方式访问:http://www.igniterealtime.org/projects/openfire/plugins/presence/readme.html

访问结果如下:

账号 状态 xmltext

user1不存在<presence type="error" from="user1@my.openfire.com"><error code="403" type="auth"><forbidden xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></presence>null
user2离线<presence type="unavailable" from="user2@my.openfire.com"><status>Unavailable</status></presence>Unavailable
user8在线<presence from="user8@my.openfire.com/trm"><priority>0</priority></presence>

或者

<presence id="6Mgiu-13" from="user8@my.openfire.com/Smack"/>
null
java代码:

import java.net.*;

import java.io.*;

/**

* 判断openfire用户的状态

* strUrl : url格式 - http://my.openfire.com:9090/plugins/presence/status?jid=user1@my.openfire.com&type=xml
* 返回值 : 0 - 用户不存在; 1 - 用户在线; 2 - 用户离线

* 说明 :必须要求 openfire加载 presence 插件,同时设置任何人都可以访问

*/

public static short IsUserOnLine(String strUrl)

{

short shOnLineState = 0; //-不存在-

try

{

URL oUrl = new URL(strUrl);

URLConnection oConn = oUrl.openConnection();

if(oConn!=null)

{

BufferedReader oIn = new BufferedReader(new InputStreamReader(oConn.getInputStream()));

if(null!=oIn)

{

String strFlag = oIn.readLine();

oIn.close();

if(strFlag.indexOf("type=\"unavailable\"")>=0)

{

shOnLineState = 2;

}

if(strFlag.indexOf("type=\"error\"")>=0)

{

shOnLineState = 0;

}

else if(strFlag.indexOf("priority")>=0 || strFlag.indexOf("id=\"")>=0)

{

shOnLineState = 1;

}

}

}

}

catch(Exception e)

{

}

return shOnLineState;

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: