Browse Source

Merge branch 'developer' of https://gitlab.com/Arisono/SkWeiChat-Baidu into developer

Bitliker 8 years ago
parent
commit
6722fd6c84

BIN
WeiChat/libs/asmack-android-8-4.0.7.jar


BIN
WeiChat/libs/asmack.jar


+ 12 - 11
WeiChat/src/main/java/com/xzjmyk/pm/activity/xmpp/XReconnectionManager.java

@@ -15,10 +15,8 @@ import com.xzjmyk.pm.activity.util.DeviceInfoUtil;
 import com.xzjmyk.pm.activity.volley.Result;
 
 import org.jivesoftware.smack.AbstractConnectionListener;
-import org.jivesoftware.smack.ConnectionListener;
 import org.jivesoftware.smack.XMPPConnection;
 import org.jivesoftware.smack.XMPPException.StreamErrorException;
-import org.jivesoftware.smack.XMPPTCPConnection;
 import org.jivesoftware.smack.packet.StreamError;
 import org.jivesoftware.smack.util.StringUtils;
 
@@ -134,6 +132,7 @@ public class XReconnectionManager extends AbstractConnectionListener {
 							doReconnecting = false;
 							LogUtil.d("Token","1:表示检查成功Token过期");
 							//TODO 关闭自动登录  可能出现账号异常情况
+							//mConnection.login();
 //							conflict();
 						} else if (checkTokenStatus == 2) {// 2、表示检查成功,Token没有改变,可以继续下面的重新登陆
 							LogUtil.d("Token","2:表示检查成功,Token没有改变,可以继续下面的重新登陆");
@@ -192,7 +191,6 @@ public class XReconnectionManager extends AbstractConnectionListener {
 	private int syncCheckToken() {// 同步网络请求Token
 		if (CoreService.DEBUG) {
 			Log.d(CoreService.TAG, "开始重新登陆前的 Token 状态检查");
-			Log.d("wang", "开始重新登陆前的 Token 状态检查");
 			String requestUrl = MyApplication.getInstance().getConfig().USER_LOGIN_AUTO;
 			if (requestUrl == null) {
 				return 1;
@@ -232,10 +230,11 @@ public class XReconnectionManager extends AbstractConnectionListener {
 
 				StringBuilder sb = new StringBuilder();
 				sb.append("access_token=" + access_token + "&");
-				String user = ((XMPPTCPConnection) mConnection).getDirectUser();
+				//String user = ((XMPPTCPConnection) mConnection).getDirectUser();
+				LogUtil.d("wang",JSON.toJSONString(mConnection));
+				String user =mConnection.getUser();
 				Log.d("wang", "user..." + user);
 				if (user == null) {
-					Log.d("wang", "user == null");
 					return 1;
 				}
 				sb.append("userId=" + StringUtils.parseName(user) + "&");
@@ -321,17 +320,19 @@ public class XReconnectionManager extends AbstractConnectionListener {
 
 	private void notifyReconnectionFailed(Exception exception) {
 		if (isReconnectionAllowed()) {
-			for (ConnectionListener listener : mConnection.getConnectionListeners()) {
-				listener.reconnectionFailed(exception);
-			}
+			LogUtil.d("xmppLogs","notifyReconnectionFailed");
+//			for (ConnectionListener listener : mConnection.getConnectionListeners()) {
+//				listener.reconnectionFailed(exception);
+//			}
 		}
 	}
 
 	private void notifyAttemptToReconnectIn(int seconds) {
 		if (isReconnectionAllowed()) {
-			for (ConnectionListener listener : mConnection.getConnectionListeners()) {
-				listener.reconnectingIn(seconds);
-			}
+			LogUtil.d("xmppLogs","notifyAttemptToReconnectIn");
+//			for (ConnectionListener listener : mConnection.getConnectionListeners()) {
+//				listener.reconnectingIn(seconds);
+//			}
 		}
 	}
 

+ 25 - 7
WeiChat/src/main/java/com/xzjmyk/pm/activity/xmpp/XmppConnectionManager.java

@@ -11,6 +11,7 @@ import android.util.Log;
 
 import com.xzjmyk.pm.activity.MyApplication;
 import com.xzjmyk.pm.activity.ui.erp.util.CommonUtil;
+import com.xzjmyk.pm.activity.ui.erp.util.LogUtil;
 
 import org.apache.harmony.javax.security.sasl.SaslException;
 import org.jivesoftware.smack.AbstractConnectionListener;
@@ -19,7 +20,7 @@ import org.jivesoftware.smack.SmackException;
 import org.jivesoftware.smack.SmackException.NotConnectedException;
 import org.jivesoftware.smack.XMPPConnection;
 import org.jivesoftware.smack.XMPPException;
-import org.jivesoftware.smack.XMPPTCPConnection;
+import org.jivesoftware.smack.tcp.XMPPTCPConnection;
 import org.jivesoftware.smack.packet.Presence;
 import org.jivesoftware.smack.util.StringUtils;
 import org.jivesoftware.smackx.ping.PingManager;
@@ -118,7 +119,7 @@ public class XmppConnectionManager {
 			}
 			final boolean isConnected = isGprsOrWifiConnected();
 			if (mIsNetWorkActive != isConnected) {// 和之前的状态不同
-				Log.d("roamer", "网络状态改变了");
+				Log.d("roamer", "网络状态改变了doLogining:"+doLogining);
 				mIsNetWorkActive = isConnected;
 				// 网络状态改变了
 				if (!mIsNetWorkActive) {// 由有网变为没网
@@ -126,6 +127,8 @@ public class XmppConnectionManager {
 						mLoginThread.interrupt();
 					}
 				} else {
+					LogUtil.d("Xmpp","isLoginAllowed():"+isLoginAllowed());
+					doLogining=true;
 					if (isLoginAllowed()) {
 						login(mLoginUserId, mLoginPassword);
 					}
@@ -197,6 +200,12 @@ public class XmppConnectionManager {
 	private boolean doLogining = false;
 
 	private boolean isLoginAllowed() {
+		LogUtil.d("Xmpp","---------isLoginAllowed()------------");
+		LogUtil.d("Xmpp","doLogining:"+doLogining);
+		LogUtil.d("Xmpp","mIsNetWorkActive:"+mIsNetWorkActive);
+		LogUtil.d("Xmpp","!mConnection.isConnected():"+!mConnection.isConnected());
+		LogUtil.d("Xmpp","!mConnection.isAuthenticated():"+!mConnection.isAuthenticated());
+		LogUtil.d("Xmpp","---------isLoginAllowed()------------");
 		return doLogining && mIsNetWorkActive && (!mConnection.isConnected() || !mConnection.isAuthenticated());
 	}
 
@@ -219,11 +228,19 @@ public class XmppConnectionManager {
 			presenceOffline();
 		}
 		if (mConnection.isConnected()) {
-			mConnection.disconnect();
+			disconnect();
 		}
 
 	}
 
+	private void disconnect()  {
+		try {
+			mConnection.disconnect();
+		} catch (NotConnectedException e) {
+			e.printStackTrace();
+		}
+	}
+
 	public synchronized void login(final String userId, final String password) {
 		Log.d("roamer", "login start");
 		if (mConnection.isAuthenticated()) {// 如果已经登陆
@@ -231,7 +248,7 @@ public class XmppConnectionManager {
 			if (StringUtils.parseName(mConnection.getUser()).equals(userId)) {// 如果登陆的用户和需要在登陆的是同一个用户,赋予可能改变的用户名和密码,返回
 				return;
 			} else {
-				mConnection.disconnect();
+				disconnect();
 			}
 		}
 
@@ -278,7 +295,7 @@ public class XmppConnectionManager {
 		}
 		mReconnectionManager.release();
 		if (mConnection != null && mConnection.isConnected()) {
-			mConnection.disconnect();
+			disconnect();
 		}
 		presenceOffline();
 	}
@@ -326,7 +343,8 @@ public class XmppConnectionManager {
 				Log.d("roamer", "login try");
 				try {
 					if (!mConnection.isConnected()) {
-						((XMPPTCPConnection) mConnection).connectWithoutLogin();
+						//((XMPPTCPConnection) mConnection).connectWithoutLogin();
+						 mConnection.connect();
 					}
 					if (mConnection.isConnected()) {
 						PingManager.getInstanceFor(mConnection).setPingInterval(60);
@@ -347,7 +365,7 @@ public class XmppConnectionManager {
 
 				if (mConnection.isAuthenticated()) {
 					if (!StringUtils.parseName(mConnection.getUser()).equals(loginUserId)) {
-						mConnection.disconnect();
+						disconnect();
 					} else {
 						doLogining = false;
 						mAbstractConnectionListener.authenticated(mConnection);