android 中 smack重新登录openfire服务器

来源:互联网 发布:网络电视上的直播软件 编辑:程序博客网 时间:2024/06/10 02:23

一.利用smack 中ReconnectionManager、

在新建Xmpp连接类的时候要加入以下代码:


static {
try {
 
Class.forName("org.jivesoftware.smack.ReconnectionManager");

} catch (Exception e) {
e.printStackTrace();
}
}


 XMPPConnection一定要把setReconnectionAllowed设置为true

private static XMPPConnection openConnection(String url, String pcName) {try {// url、端口,也可以设置连接的服务器名字,地址,端口,用户。Log.i("XmppTool", "url:" + url + "  pcname:" + pcName);ConnectionConfiguration connConfig = new ConnectionConfiguration(url, 5222, pcName);  connConfig.setReconnectionAllowed(true); // 允许重连  Log.i("XmppTool", connConfig.toString());con = new XMPPConnection(connConfig);Log.i("XmppTool", "1" + con.toString());con.connect();Log.i("XmppTool", "2" + con.toString());} catch (XMPPException xe) {Log.e("XmppToolException", xe.getMessage());xe.printStackTrace();// throw new IllegalStateException(xe);// /add begin 2015.09.25 wangxingtong 处理空指针} catch (NullPointerException e) {e.printStackTrace();}// /add endreturn con;}

完整的xmpp类如下:

import org.jivesoftware.smack.ConnectionConfiguration;import org.jivesoftware.smack.XMPPConnection;import org.jivesoftware.smack.XMPPException;import android.util.Log;/** * Smack连接类 *  */public class XmppTool {private static XMPPConnection con;static {try {Class.forName("org.jivesoftware.smack.ReconnectionManager");} catch (Exception e) {e.printStackTrace();}} /** * 连接smack *  * @param url * @param pcName */private static XMPPConnection openConnection(String url, String pcName) {try {// url、端口,也可以设置连接的服务器名字,地址,端口,用户。ConnectionConfiguration connConfig = new ConnectionConfiguration(url, 5222, pcName);connConfig.setReconnectionAllowed(true); // 允许重连con = new XMPPConnection(connConfig);con.connect();} catch (XMPPException xe) {xe.printStackTrace();} catch (NullPointerException e) {e.printStackTrace();}return con;}public static synchronized XMPPConnection getConnection(String url,String pcName) {if (con == null) {con = openConnection(url, pcName);}return con;}//其他方法可自行添加}


二.添加ConnectionListener 进行重连

首先新建自己的连接监听,继承自ConnectionListioner

此监听主要是对上一个ReconnectionManager的重连的监听,重连正常时可以自动的重新连接到openfire服务器,出现问题时,就要自行进行重登操作,主要是在重写的重新登录失败的方法reconnectionFailed(Exception arg0)  中进行操作

1.登录成功时要建立监听:

MyConnnectionListerer myConnnectionListerer = new MyConnnectionListerer();XmppTool.getConnection(SERVICE_URL, SERVICE_NAME).addConnectionListener(myConnnectionListerer);

建立自己的连接监听,继承自ConnectinListioner:

public class MyConnnectionListerer implements ConnectionListener {@Overridepublic void connectionClosed() {//当smack连接正常关闭时进行操作//注意当服务器强行使你退出时也会进入的此方法//在此可以进行 reconnectiongFailed中重连操作}@Overridepublic void connectionClosedOnError(Exception arg0) { //当连接异常关闭时进行操作//包括网路连接中断,服务器故障等//在此可以进行 reconnectiongFailed中重连操作}@Overridepublic void reconnectingIn(int arg0) { //正在重新登录openfire服务器}@Overridepublic void reconnectionFailed(Exception arg0) {//重登失败//利用ReconnectionManager重连失败时会进入到此方法//重连操作://无法自动重连时要关闭此连接监听XmppTool.getConnection().removeConnectionListener(myConnnectionListerer);//然后关闭清空Xmpp的连接,再重新启动新的连接进行登录,登录成功后再次添加此监听}@Overridepublic void reconnectionSuccessful() {//ReconnectionManager自动重新登录成功时进行的操作//在掉线时可能会退出群组,在自动重连之后不会重新加入之前加入的群组,需要在此重新加入群组}}



0 0
原创粉丝点击