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
2. 確保該插件設置可容許任何人訪問(若是是跨域瀏覽的話)
.net
而後經過以下方式訪問: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