diff --git a/cim-boot-server/cim-boot-server.iws b/cim-boot-server/cim-boot-server.iws index 444f09b..6c1a6ca 100644 --- a/cim-boot-server/cim-boot-server.iws +++ b/cim-boot-server/cim-boot-server.iws @@ -103,7 +103,7 @@ - + @@ -127,46 +127,46 @@ - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + diff --git a/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMConnectorManager.java b/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMConnectorManager.java index e3c070a..6439f67 100644 --- a/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMConnectorManager.java +++ b/cim-client-sdk/cim-android-sdk/src/main/java/com/farsunset/cim/sdk/android/CIMConnectorManager.java @@ -41,7 +41,6 @@ import java.nio.channels.SocketChannel; import java.util.Random; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.concurrent.atomic.AtomicLong; /* * 连接服务端管理,cim核心处理类,管理连接,以及消息处理 @@ -54,14 +53,13 @@ class CIMConnectorManager { private static final int WRITE_BUFFER_SIZE = 1024; - private static final int READ_IDLE_TIME = 120 * 1000; - private static final int CONNECT_TIME_OUT = 10 * 1000; + /* + 服务端在连接写空闲120秒的时候发送心跳请求给客户端,所以客户端在空闲150秒后都没有收到任何数据,则关闭链接,并重新创建 + */ private static final int CONNECT_ALIVE_TIME_OUT = 150 * 1000; - private static final AtomicLong LAST_READ_TIME = new AtomicLong(0); - private static final CIMLogger LOGGER = CIMLogger.getLogger(); private static final HandlerThread IDLE_HANDLER_THREAD = new HandlerThread("READ-IDLE", Process.THREAD_PRIORITY_BACKGROUND); @@ -72,7 +70,6 @@ class CIMConnectorManager { private final ByteBuffer headerBuffer = ByteBuffer.allocate(CIMConstant.DATA_HEADER_LENGTH); - private final ExecutorService workerExecutor = Executors.newFixedThreadPool(1, r -> new Thread(r, "worker-")); private final ExecutorService bossExecutor = Executors.newFixedThreadPool(1, r -> new Thread(r, "boss-")); @@ -88,7 +85,6 @@ class CIMConnectorManager { this.context = context; } - public synchronized static CIMConnectorManager getManager(Context context) { if (manager == null) { @@ -214,8 +210,6 @@ class CIMConnectorManager { private void sessionCreated() { LOGGER.sessionCreated(socketChannel); - LAST_READ_TIME.set(System.currentTimeMillis()); - Intent intent = new Intent(); intent.setPackage(context.getPackageName()); intent.setAction(CIMConstant.IntentAction.ACTION_CONNECT_FINISHED); @@ -227,8 +221,6 @@ class CIMConnectorManager { idleHandler.removeMessages(0); - LAST_READ_TIME.set(0); - LOGGER.sessionClosed(socketChannel); Intent intent = new Intent(); @@ -242,12 +234,7 @@ class CIMConnectorManager { LOGGER.sessionIdle(socketChannel); - /* - * 用于解决,wifi情况下。偶而路由器与服务器断开连接时,客户端并没及时收到关闭事件 导致这样的情况下当前连接无效也不会重连的问题 - */ - if (System.currentTimeMillis() - LAST_READ_TIME.get() >= CONNECT_ALIVE_TIME_OUT) { - closeSession(); - } + closeSession(); } @@ -313,20 +300,17 @@ class CIMConnectorManager { private void handleConnectedEvent() { + closeCountDown(); + sessionCreated(); - idleHandler.sendEmptyMessageDelayed(0, READ_IDLE_TIME); } private void handleSocketReadEvent() throws IOException { - onMessageDecodeFinished(messageDecoder.doDecode(headerBuffer,socketChannel)); + closeCountDown(); - markLastReadTime(); - - } - - private void onMessageDecodeFinished(Object message){ + Object message = messageDecoder.doDecode(headerBuffer,socketChannel); LOGGER.messageReceived(socketChannel, message); @@ -336,17 +320,15 @@ class CIMConnectorManager { } this.messageReceived(message); + } - private void markLastReadTime() { - - LAST_READ_TIME.set(System.currentTimeMillis()); + private void closeCountDown() { idleHandler.removeMessages(0); - idleHandler.sendEmptyMessageDelayed(0, READ_IDLE_TIME); - + idleHandler.sendEmptyMessageDelayed(0, CONNECT_ALIVE_TIME_OUT); } } diff --git a/cim-use-examples/cim-client-android/.idea/caches/build_file_checksums.ser b/cim-use-examples/cim-client-android/.idea/caches/build_file_checksums.ser index 71096f6..6d8bd5d 100644 Binary files a/cim-use-examples/cim-client-android/.idea/caches/build_file_checksums.ser and b/cim-use-examples/cim-client-android/.idea/caches/build_file_checksums.ser differ diff --git a/cim-use-examples/cim-client-android/app/libs/cim-android-sdk-3.8.0.jar b/cim-use-examples/cim-client-android/app/libs/cim-android-sdk-3.8.0.jar index 6d74da3..15e36c6 100644 Binary files a/cim-use-examples/cim-client-android/app/libs/cim-android-sdk-3.8.0.jar and b/cim-use-examples/cim-client-android/app/libs/cim-android-sdk-3.8.0.jar differ diff --git a/cim-use-examples/cim-client-android/app/src/main/AndroidManifest.xml b/cim-use-examples/cim-client-android/app/src/main/AndroidManifest.xml index b6c498c..e761826 100644 --- a/cim-use-examples/cim-client-android/app/src/main/AndroidManifest.xml +++ b/cim-use-examples/cim-client-android/app/src/main/AndroidManifest.xml @@ -15,7 +15,7 @@ android:label="@string/app_name" android:theme="@style/GlobeTheme"> diff --git a/cim-use-examples/cim-client-android/app/src/main/java/com/farsunset/ichat/example/app/Constant.java b/cim-use-examples/cim-client-android/app/src/main/java/com/farsunset/ichat/example/app/Constant.java index e51a5d8..3c8ad51 100644 --- a/cim-use-examples/cim-client-android/app/src/main/java/com/farsunset/ichat/example/app/Constant.java +++ b/cim-use-examples/cim-client-android/app/src/main/java/com/farsunset/ichat/example/app/Constant.java @@ -24,7 +24,7 @@ package com.farsunset.ichat.example.app; public interface Constant { //服务端IP地址 - String CIM_SERVER_HOST = "192.168.2.103"; + String CIM_SERVER_HOST = "192.168.22.103"; //注意,这里的端口不是tomcat的端口,没改动就使用默认的23456 int CIM_SERVER_PORT = 23456; diff --git a/cim-use-examples/cim-client-android/app/src/main/java/com/farsunset/ichat/example/ui/SplanshActivity.java b/cim-use-examples/cim-client-android/app/src/main/java/com/farsunset/ichat/example/ui/SplashActivity.java similarity index 84% rename from cim-use-examples/cim-client-android/app/src/main/java/com/farsunset/ichat/example/ui/SplanshActivity.java rename to cim-use-examples/cim-client-android/app/src/main/java/com/farsunset/ichat/example/ui/SplashActivity.java index 21cfa87..f62872e 100644 --- a/cim-use-examples/cim-client-android/app/src/main/java/com/farsunset/ichat/example/ui/SplanshActivity.java +++ b/cim-use-examples/cim-client-android/app/src/main/java/com/farsunset/ichat/example/ui/SplashActivity.java @@ -22,11 +22,7 @@ package com.farsunset.ichat.example.ui; -import android.content.Context; import android.content.Intent; -import android.net.ConnectivityManager; -import android.net.Network; -import android.net.NetworkRequest; import android.os.Build; import android.os.Bundle; import android.support.annotation.RequiresApi; @@ -35,13 +31,12 @@ import android.view.animation.AlphaAnimation; import android.widget.Toast; import com.farsunset.cim.sdk.android.CIMPushManager; -import com.farsunset.cim.sdk.android.constant.CIMConstant; import com.farsunset.ichat.example.BuildConfig; import com.farsunset.ichat.example.R; import com.farsunset.ichat.example.app.CIMMonitorActivity; import com.farsunset.ichat.example.app.Constant; -public class SplanshActivity extends CIMMonitorActivity { +public class SplashActivity extends CIMMonitorActivity { @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) @@ -53,7 +48,7 @@ public class SplanshActivity extends CIMMonitorActivity { CIMPushManager.setLoggerEnable(this, BuildConfig.DEBUG); //连接服务端 - CIMPushManager.connect(SplanshActivity.this, Constant.CIM_SERVER_HOST, Constant.CIM_SERVER_PORT); + CIMPushManager.connect(SplashActivity.this, Constant.CIM_SERVER_HOST, Constant.CIM_SERVER_PORT); final View view = View.inflate(this, R.layout.activity_splansh, null); @@ -68,7 +63,7 @@ public class SplanshActivity extends CIMMonitorActivity { @Override public void onConnectFinished(boolean autoBind) { - Intent intent = new Intent(SplanshActivity.this, LoginActivity.class); + Intent intent = new Intent(SplashActivity.this, LoginActivity.class); startActivity(intent); finish(); }