关于判断openfire 服务器中用户的在线状态问题

       虽然接触了openfire有段时间了,但还是没有深入去理解其原理,所以,遇到一些新问题就有点束手无策,今天又遇到一个,开始以为用户的在线状态会存数据库里面呢,没想到openfire没这么干,存在了session里面,找了很多资料,终于找到了方法,好像也还很简单的。废话不多说,进入正题:

        首先我们要确保openfire 服务器中安装了presence 插件,同时在openfire后台中的服务器设置中进入Presence Service处,设置任何人都可以访问的权限(不过这样设置的话会对安全性有一定影响)。

        然后就是代码判断了:

    //传入路径格式:  String url = "http://localhost:9090/plugins/presence/[email protected]&type=xml";

      public static int IsUserOnLine(String strUrl) {
        int state = 0;
        //返回值 : 0 - 用户不存在; 1 - 用户在线; 2 - 用户离线
        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();
                    //System.out.println(strFlag);
                    oIn.close();
                    if (strFlag.indexOf("type=\"unavailable\"") >= 0) {
                        state = 2;
                    }
                    if (strFlag.indexOf("type=\"error\"") >= 0) {
                        state = 0;
                    } else if (strFlag.indexOf("priority") >= 0 || strFlag.indexOf("id=\"") >= 0) {
                        state = 1;
                    }
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return state;
    }   //这是网上copy的代码

    到这里问题就算解决了,不过对于openfire,还有很多未知数等着解决....

你可能感兴趣的:(openfire,在线状态)