diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMConnectorManager.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMConnectorManager.java index a9c2593..7f11de3 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMConnectorManager.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMConnectorManager.java @@ -26,7 +26,7 @@ import java.util.Map; import java.util.Random; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.concurrent.Semaphore; +import java.util.concurrent.atomic.AtomicBoolean; import org.apache.mina.core.future.ConnectFuture; import org.apache.mina.core.future.IoFutureListener; @@ -76,7 +76,9 @@ class CIMConnectorManager extends IoHandlerAdapter implements KeepAliveMessageFa private ExecutorService executor = Executors.newFixedThreadPool(1); - private Semaphore semaphore = new Semaphore(1,true); + + private final AtomicBoolean CONNECTING_FLAG = new AtomicBoolean(false) ; + private CIMConnectorManager(Context ctx) { context = ctx; makeNioConnector(); @@ -127,11 +129,14 @@ class CIMConnectorManager extends IoHandlerAdapter implements KeepAliveMessageFa return; } + - if (isConnected() || !semaphore.tryAcquire()) { + if (CONNECTING_FLAG.get() || isConnected()) { return; } + CONNECTING_FLAG.set(true); + if(connector == null || connector.isDisposed()) { makeNioConnector(); } @@ -149,7 +154,7 @@ class CIMConnectorManager extends IoHandlerAdapter implements KeepAliveMessageFa connector.connect(remoteAddress).addListener(new IoFutureListener() { @Override public void operationComplete(ConnectFuture future) { - semaphore.release(); + CONNECTING_FLAG.set(false); future.removeListener(this); if(future.getException() != null) { handleConnectFailure(future.getException(),remoteAddress); @@ -267,7 +272,7 @@ class CIMConnectorManager extends IoHandlerAdapter implements KeepAliveMessageFa intent.setPackage(context.getPackageName()); intent.setAction(CIMConstant.IntentAction.ACTION_CONNECTION_CLOSED); context.sendBroadcast(intent); - + } @Override diff --git a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/constant/CIMConstant.java b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/constant/CIMConstant.java index a631dcd..61daffb 100644 --- a/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/constant/CIMConstant.java +++ b/cim_for_mina/cim-android-sdk/src/com/farsunset/cim/sdk/android/constant/CIMConstant.java @@ -96,7 +96,7 @@ public interface CIMConstant { String ACTION_REPLY_RECEIVED = "com.farsunset.cim.REPLY_RECEIVED"; // 网络变化广播 - String ACTION_NETWORK_CHANGED = "com.farsunset.cim.NETWORK_CHANAGED"; + String ACTION_NETWORK_CHANGED = "com.farsunset.cim.NETWORK_CHANGED"; // 重试连接 String ACTION_CONNECTION_RECOVERY = "com.farsunset.cim.CONNECTION_RECOVERY"; diff --git a/cim_for_mina/cim-client-android/app/libs/cim-android-sdk-3.6.jar b/cim_for_mina/cim-client-android/app/libs/cim-android-sdk-3.6.jar index a6debce..623a860 100644 Binary files a/cim_for_mina/cim-client-android/app/libs/cim-android-sdk-3.6.jar and b/cim_for_mina/cim-client-android/app/libs/cim-android-sdk-3.6.jar differ diff --git a/cim_for_mina/cim-client-android/app/src/main/AndroidManifest.xml b/cim_for_mina/cim-client-android/app/src/main/AndroidManifest.xml index 69fcb1a..e6347cb 100644 --- a/cim_for_mina/cim-client-android/app/src/main/AndroidManifest.xml +++ b/cim_for_mina/cim-client-android/app/src/main/AndroidManifest.xml @@ -62,7 +62,7 @@ - + diff --git a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMConnectorManager.java b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMConnectorManager.java index 6b96230..5171c34 100644 --- a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMConnectorManager.java +++ b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/CIMConnectorManager.java @@ -25,7 +25,7 @@ import java.net.InetSocketAddress; import java.util.Random; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.concurrent.Semaphore; +import java.util.concurrent.atomic.AtomicBoolean; import android.content.Context; import android.content.Intent; @@ -75,7 +75,7 @@ class CIMConnectorManager extends ChannelInboundHandlerAdapter{ private EventLoopGroup loopGroup; private Channel channel;; private ExecutorService executor = Executors.newFixedThreadPool(1); - private Semaphore semaphore = new Semaphore(1,true); + private final AtomicBoolean CONNECTING_FLAG = new AtomicBoolean(false) ; private Context context; @@ -143,11 +143,13 @@ class CIMConnectorManager extends ChannelInboundHandlerAdapter{ return; } - - if (isConnected() || !semaphore.tryAcquire()) { + + if (CONNECTING_FLAG.get() || isConnected()) { return; } + CONNECTING_FLAG.set(true); + if (bootstrap == null || loopGroup.isShutdown()) { makeNioBootstrap(); } @@ -161,7 +163,7 @@ class CIMConnectorManager extends ChannelInboundHandlerAdapter{ @Override public void operationComplete(ChannelFuture future) { - semaphore.release(); + CONNECTING_FLAG.set(false); future.removeListener(this); if(!future.isSuccess() && future.cause() != null) { handleConnectFailure(future.cause(),remoteAddress); diff --git a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/constant/CIMConstant.java b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/constant/CIMConstant.java index fa3afc1..9bf94b8 100644 --- a/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/constant/CIMConstant.java +++ b/cim_for_netty/cim-android-sdk/src/com/farsunset/cim/sdk/android/constant/CIMConstant.java @@ -96,7 +96,7 @@ public interface CIMConstant { String ACTION_REPLY_RECEIVED = "com.farsunset.cim.REPLY_RECEIVED"; // 网络变化广播 - String ACTION_NETWORK_CHANGED = "com.farsunset.cim.NETWORK_CHANAGED"; + String ACTION_NETWORK_CHANGED = "com.farsunset.cim.NETWORK_CHANGED"; // 重试连接 diff --git a/cim_for_netty/cim-client-android/.idea/misc.xml b/cim_for_netty/cim-client-android/.idea/misc.xml index af0bbdd..703e5d4 100644 --- a/cim_for_netty/cim-client-android/.idea/misc.xml +++ b/cim_for_netty/cim-client-android/.idea/misc.xml @@ -5,7 +5,7 @@ - + diff --git a/cim_for_netty/cim-client-android/app/libs/cim-android-sdk-3.6.jar b/cim_for_netty/cim-client-android/app/libs/cim-android-sdk-3.6.jar index 770e0aa..48b23e8 100644 Binary files a/cim_for_netty/cim-client-android/app/libs/cim-android-sdk-3.6.jar and b/cim_for_netty/cim-client-android/app/libs/cim-android-sdk-3.6.jar differ diff --git a/cim_for_netty/cim-client-android/app/src/main/AndroidManifest.xml b/cim_for_netty/cim-client-android/app/src/main/AndroidManifest.xml index 69fcb1a..e6347cb 100644 --- a/cim_for_netty/cim-client-android/app/src/main/AndroidManifest.xml +++ b/cim_for_netty/cim-client-android/app/src/main/AndroidManifest.xml @@ -62,7 +62,7 @@ - +