openfire xmpp 如何判斷用戶是否在線

 

openfire xmpp 如何判斷用戶是否在線 

2013-02-26 12:20 4716人閱讀 評論(0) 收藏 舉報html

 分類:java

xmpp(32) 跨域

http://iammr.7.blog.163.com/blog/static/49102699201041961613109/url


想象中如此簡單的功能,想不到卻這般大費周折。
如要實現,必須先確保:
1. openfire中安裝有「Presence」 插件。
spa

openfire xmpp 如何判斷用戶是否在線 - Mr.7 - Mr.7

 
2. 確保該插件設置可容許任何人訪問(若是是跨域瀏覽的話)
.net

openfire xmpp 如何判斷用戶是否在線 - Mr.7 - Mr.7

 

而後經過以下方式訪問:http://www.igniterealtime.org/projects/openfire/plugins/presence/readme.html

訪問結果以下:
插件

 帳號  狀態  xml text 
 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;
}code

相關文章
相關標籤/搜索