فهرست منبع

## [1.2.1] version 81 - 2020-11-03
### Changed
- NettyClient重构重连,判断是否在连接过程中

allen 3 سال پیش
والد
کامیت
64b19cde0c

+ 2 - 2
build.gradle

@@ -47,12 +47,12 @@ buildscript {
     /**
      * APP版本码
      */
-    ext.app_version_code = 80
+    ext.app_version_code = 81
 
     /**
      * APP版本号
      */
-    ext.app_version = "1.2.0"
+    ext.app_version = "1.2.1"
 
     /**
      * 项目依赖库

+ 2 - 0
home/src/main/code/com/wdkl/ncs/android/component/home/activity/WatchHome2Activity.kt

@@ -277,8 +277,10 @@ class WatchHome2Activity : BaseActivity<WatchHomeActivityPresenter, WatchActivit
         Constants.sipId = data.sipId
 
         if (NettyClient.instance.getChannel() == null){
+            Log.w(TAG,"TCP.进入初始连接")
             HandleTcpConnect.instance.tcpInitConnect()
         } else if (!NettyClient.instance.isConnect()){
+            Log.w(TAG,"TCP.进入重新连接")
             HandleTcpConnect.instance.tcpReConnect()
         }
 

+ 5 - 1
home/src/main/code/com/wdkl/ncs/android/component/home/service/WdKeepAliveService.kt

@@ -10,6 +10,7 @@ import com.alibaba.fastjson.JSON
 import com.google.gson.FieldNamingPolicy
 import com.google.gson.Gson
 import com.google.gson.GsonBuilder
+import com.wdkl.core.consts.Urls
 import com.wdkl.core.socket.SocketManager
 import com.wdkl.ncs.android.component.home.activity.*
 import com.wdkl.ncs.android.component.home.settingconfig.SettingConfig
@@ -292,14 +293,17 @@ class WdKeepAliveService : AbsWorkService() {
         if (NetHelper.getInstance().getNetworkState(this@WdKeepAliveService) != NetHelper.NETWORK_NONE) {
 
             if (NettyClient.instance.getChannel() == null){
+                Log.w(TAG,"TCP.进入初始连接")
                 HandleTcpConnect.instance.tcpInitConnect()
             } else if (!NettyClient.instance.isConnect()){
+                Log.w(TAG,"TCP.进入重新连接")
                 HandleTcpConnect.instance.tcpReConnect()
             } else {
                 if (SocketManager.getInstance().connectFlag) {
                     EventBus.getDefault().post(MessageEvent(TcpModel(), Constants.EVENT_RTC_STATE))
                 } else {
-                    SocketManager.getInstance().reConnect()
+                    SocketManager.getInstance().unConnect()
+                    SocketManager.getInstance().connect(Urls.WS, Constants.sipId, 0)
                 }
             }
         } else {

+ 14 - 5
home/src/main/code/com/wdkl/ncs/android/component/home/util/HandleTcpConnect.kt

@@ -19,6 +19,7 @@ class HandleTcpConnect {
 
     @SuppressLint("CheckResult")
     fun tcpInitConnect(){
+        Log.d(TAG, "TCP.开始初始连接")
         NettyClient.instance.connect(Constants.tcpServer,Constants.tcpPort,Constants.heartBeat.toLong()).subscribe {
             if (it){
                 Log.d(TAG, "TCP.连接成功,开始连接RTC")
@@ -32,11 +33,15 @@ class HandleTcpConnect {
 
     @SuppressLint("CheckResult")
     fun tcpReConnect(){
+        Log.d(TAG, "TCP.开始重新连接")
         NettyClient.instance.reConnect().subscribe {
             if (it){
-                Log.d(TAG, "TCP.重连成功,开始重连RTC")
-                SocketManager.getInstance().unConnect()
-                SocketManager.getInstance().connect(Urls.WS,Constants.sipId,0)
+                Log.d(TAG, "TCP.重连成功")
+                if (SocketManager.getInstance().userState!=1) {
+                    Log.d(TAG, "TCP.RTC登出状态,重新连接")
+                    SocketManager.getInstance().unConnect()
+                    SocketManager.getInstance().connect(Urls.WS, Constants.sipId, 0)
+                }
             } else {
                 Log.e(TAG, "TCP.重连失败")
             }
@@ -45,12 +50,16 @@ class HandleTcpConnect {
 
     @SuppressLint("CheckResult")
     fun tcpReConnectWithMsgShow(){
+        Log.d(TAG, "TCP.开始重新连接")
         showMessage("服务连接失败,正在重连")
         NettyClient.instance.reConnect().subscribe{
             if (it){
                 Log.d(TAG, "服务重连成功")
-                SocketManager.getInstance().unConnect()
-                SocketManager.getInstance().connect(Urls.WS,Constants.sipId,0)
+                if (SocketManager.getInstance().userState!=1) {
+                    Log.d(TAG, "TCP.RTC登出状态,重新连接")
+                    SocketManager.getInstance().unConnect()
+                    SocketManager.getInstance().connect(Urls.WS, Constants.sipId, 0)
+                }
                 showMessage("重连成功,请重试")
             } else {
                 Log.d(TAG, "服务重连失败")

+ 6 - 1
home/src/main/code/com/wdkl/ncs/android/component/home/util/NetWorkChangeReceiver.kt

@@ -7,9 +7,13 @@ import android.net.ConnectivityManager
 import android.net.Network
 import android.net.NetworkInfo
 import android.os.Build
+import android.util.Log
+import com.blankj.utilcode.util.NetworkUtils
 import com.wdkl.ncs.android.middleware.tcp.NettyClient
 
 class NetWorkChangeReceiver : BroadcastReceiver() {
+    val TAG = NetWorkChangeReceiver::class.simpleName
+
     override fun onReceive(context: Context?, intent: Intent?) {
         // API版本23以上使用
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
@@ -30,6 +34,7 @@ class NetWorkChangeReceiver : BroadcastReceiver() {
             // 判断网络是否链接
             if (null != networkInfo && networkInfo.isConnected) {
                 //当前网络已经链接
+                Log.w(TAG,"TCP.进入重新连接")
                 if (!NettyClient.instance.isConnect()){
                     HandleTcpConnect.instance.tcpReConnect()
                 }
@@ -57,7 +62,7 @@ class NetWorkChangeReceiver : BroadcastReceiver() {
             val dataNetworkInfo: NetworkInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
             if (wifiNetworkInfo.isConnected || dataNetworkInfo.isConnected) {
                 //WIFI已连接 或 移动数据已连接
-
+                Log.w(TAG,"TCP.进入重新连接")
                 if (!NettyClient.instance.isConnect()){
                     HandleTcpConnect.instance.tcpReConnect()
                 }

+ 1 - 1
middleware/src/main/code/com/wdkl/ncs/android/middleware/config/WdklNcsConfigCenter.kt

@@ -22,7 +22,7 @@ class WdklNcsConfigCenter {
     /**
      *  是否处于开发模式
      */
-    val APP_DEV = true
+    val APP_DEV = false
 
     /**
      * 基础URL

+ 35 - 6
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/NettyClient.kt

@@ -30,6 +30,7 @@ class NettyClient{
     /*伴生对象*/
     companion object {
         var instance = NettyClient()
+        var isConnecting = false
     }
 
     private lateinit var group: NioEventLoopGroup
@@ -54,8 +55,10 @@ class NettyClient{
     }
 
     /*连接*/
+    @Synchronized
     fun connect(ip: String, port: Int, heartBeatSeconds: Long): Observable<Boolean> {
         Log.d(TAG, "开始连接 " + ip + ":" + port +","+heartBeatSeconds)
+        isConnecting = true
 
         this.ip = ip
         this.port = port
@@ -99,10 +102,13 @@ class NettyClient{
                     it.onNext(false)
                 } else {
                     group.schedule(Runnable {
-                        reConnect()
+                        group.shutdownGracefully()
+                        connect(ip, port, heartBeatSeconds)
                         retryTimes++
                     }, retrySeconds * retryTimes, TimeUnit.SECONDS)
                 }
+            } finally {
+                isConnecting = false
             }
         }.compose(ThreadFromUtils.defaultSchedulers())
     }
@@ -110,7 +116,7 @@ class NettyClient{
 
     /*发送命令*/
     fun sendMsg(msg: String): Observable<Boolean> {
-
+        Log.d(TAG, "TCP.发送消息:$msg")
         return Observable.create<Boolean> { emitter ->
             if (isConnect) {
                 channel?.writeAndFlush(msg)?.addListener {
@@ -129,14 +135,37 @@ class NettyClient{
 
     /*重连*/
     fun reConnect(): Observable<Boolean> {
-        disConnect()
-        return connect(ip, port, heartBeatSeconds)
+        if (isConnecting){
+            Log.w(TAG, "TCP.在连接过程中")
+            return Observable.create<Boolean>{
+                it.onNext(false)
+            }
+        }
+
+        isConnecting = true
+        return Observable.create<Boolean> {
+            try {
+                channel = bootstrap.connect().sync().channel();
+                it.onNext(channel!!.isActive)
+                isConnect = channel!!.isActive
+            } catch (e:Exception){
+                isConnect = false
+                it.onNext(false)
+            } finally {
+                isConnecting = false
+            }
+        }
+
+//        disConnect()
+//        return connect(ip, port, heartBeatSeconds)
     }
 
 
     /*关闭连接*/
     private fun disConnect() {
-        isConnect = false
-        group.shutdownGracefully()
+        if (channel!=null) {
+            isConnect = false
+            group.shutdownGracefully()
+        }
     }
 }

+ 6 - 0
readme.md

@@ -26,6 +26,12 @@
 
 ---
 
+## [1.2.1] version 81 - 2020-11-03
+### Changed
+- NettyClient重构重连,判断是否在连接过程中
+
+---
+
 ## [1.2.0] version 80 - 2020-11-02
 ### Changed
 - 更换TcpClient 为 NettyClient,使用观察者,连接,重连及发送消息须实现 subscribe