Kaynağa Gözat

tcp连接优化

weizhengliang 3 yıl önce
ebeveyn
işleme
3d15e98e16

+ 6 - 2
conversion_box/src/main/java/com/wdkl/app/ncs/conversion_box/activity/MainActivity.kt

@@ -1006,6 +1006,10 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
             Constant.EVENT_TCP_STATE -> {
                 updateTcpState()
             }
+
+            Constant.EVENT_RESTART_APP -> {
+                AppUpdateHelper.restartApp(activity)
+            }
         }
     }
 
@@ -1264,9 +1268,9 @@ class MainActivity :BaseActivity<MainActivityPresenter, MainActivityLayoutBindin
                 if (!initialized) {
                     presenter.loadTcpServerHost()
                 } else if (NetHelper.getInstance().networkAvailable()) {
-                    if (!Constant.TCP_CONNECTED && !TextUtils.isEmpty(Constant.TCP_SERVER_URL)) {
+                    /*if (!Constant.TCP_CONNECTED && !TextUtils.isEmpty(Constant.TCP_SERVER_URL)) {
                         TcpClient.getInstance().doConnect()
-                    }
+                    }*/
                     if (Constant.DEVICE_STATUS == 1 && SocketManager.getInstance().userState == 0) {
                         //如果socket断开了则重连
                         connectSocket()

+ 25 - 0
conversion_box/src/main/java/com/wdkl/app/ncs/conversion_box/helper/AppUpdateHelper.java

@@ -1,5 +1,7 @@
 package com.wdkl.app.ncs.conversion_box.helper;
 
+import android.app.AlarmManager;
+import android.app.PendingIntent;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.ApplicationInfo;
@@ -10,6 +12,11 @@ import android.os.Build;
 import android.os.Environment;
 import android.util.Log;
 
+import com.wdkl.ncs.android.component.welcome.activity.WelcomeActivity;
+import com.wdkl.skywebrtc.CallSession;
+import com.wdkl.skywebrtc.EnumType;
+import com.wdkl.skywebrtc.SkyEngineKit;
+
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.InputStreamReader;
@@ -206,6 +213,24 @@ public class AppUpdateHelper {
         }
     }
 
+    public static void restartApp(Context context) {
+        CallSession session= SkyEngineKit.Instance().getCurrentSession();
+        if(session!=null&&session.getState()!= EnumType.CallState.Idle){
+            SkyEngineKit.Instance().endCall();
+        }
+
+        //重新启动app
+        Intent mStartActivity = new Intent(context.getApplicationContext(), WelcomeActivity.class);
+        mStartActivity.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+        int mPendingIntentId = 123456;
+        PendingIntent mPendingIntent = PendingIntent.getActivity(context.getApplicationContext(), mPendingIntentId, mStartActivity, PendingIntent.FLAG_CANCEL_CURRENT);
+        AlarmManager mgr = (AlarmManager) context.getApplicationContext().getSystemService(Context.ALARM_SERVICE);
+        mgr.set(AlarmManager.RTC, System.currentTimeMillis() + 2000, mPendingIntent);
+
+        android.os.Process.killProcess(android.os.Process.myPid());
+        System.exit(0);
+    }
+
     public interface UpdateCallBack {
         void onFailed();
         void onSuccess();

+ 2 - 2
conversion_box/src/main/res/layout/view_title_layout.xml

@@ -32,8 +32,8 @@
         android:layout_height="wrap_content"
         android:layout_centerHorizontal="true"
         android:layout_centerVertical="true"
-        android:format12Hour="yyyy-MM-dd HH:mm:ss EEEE"
-        android:format24Hour="yyyy-MM-dd HH:mm:ss EEEE"
+        android:format12Hour="yyyy-MM-dd HH:mm EEEE"
+        android:format24Hour="yyyy-MM-dd HH:mm EEEE"
         android:timeZone="GMT+8"
         android:textColor="@color/main_color"
         android:textSize="@dimen/font_size_20" />

+ 2 - 0
middleware/src/main/code/com/wdkl/ncs/android/middleware/common/Constant.java

@@ -149,4 +149,6 @@ public class Constant {
      * 串口消息
      */
     public static final int EVENT_SERIAL_EVENT = 0x10;
+
+    public static final int EVENT_RESTART_APP = 0x11;
 }

+ 10 - 35
middleware/src/main/code/com/wdkl/ncs/android/middleware/tcp/TcpClient.java

@@ -40,6 +40,7 @@ public class TcpClient {
     private Integer retrySeconds = 5;
     //重试计数
     private Integer retryTimes = 1;
+    private Integer reconnetTimes = 0;
     //tcp是否完成初始化
     private boolean inited = false;
 
@@ -114,20 +115,25 @@ public class TcpClient {
                         @Override
                         public void run() {
                             retryTimes++;
-                            if (retryTimes > 20) { //重试30次还没连成功,等10分钟后再试
+                            if (retryTimes > 30) { //重试30次还没连成功,等10分钟后再试
 //                                System.out.println("TcpClient 重试" + (retryTimes - 1) + "次,结束");
 //                                channel.close();
 //                                workGroup.shutdownGracefully();
 //                                //todo: 从API获取新的serverIP和serverPort,全新连接
 //                                TcpClient.getInstance().init(Constant.TCP_SERVER_URL, Constant.TCP_PORT, Constant.TCP_HEART_BEAT);
                                 retryTimes=1;
+                                reconnetTimes++;
                                 channelFuture.channel().eventLoop().schedule(new Runnable() {
                                     @Override
                                     public void run() {
-                                        System.out.println("TcpClientHandler 重新连接,第" + retryTimes + "次");
-                                        doConnect();
+                                        System.out.println("TcpClientHandler 重新连接,第" + retryTimes + "次" + ", 重试" + reconnetTimes + "次");
+                                        if (reconnetTimes > 2) {
+                                            EventBus.getDefault().post(new MessageEvent(0, Constant.EVENT_RESTART_APP));
+                                        } else {
+                                            doConnect();
+                                        }
                                     }
-                                }, 60*10, TimeUnit.SECONDS);
+                                }, 60*5, TimeUnit.SECONDS);
 
                             }else{
                                 doConnect();
@@ -138,19 +144,6 @@ public class TcpClient {
                 }
             }
         });
-//        try {
-//            future.sync();
-//            future.channel().closeFuture().sync();
-//        } catch (InterruptedException e) {
-//            e.printStackTrace();
-//        } finally {
-            //重试之前不关
-//            try {
-//                Thread.sleep(retrySeconds * retryTimes*1000 + 1000);
-//            } catch (InterruptedException e) {
-//            }
-//            workGroup.shutdownGracefully();
-//        }
     }
 
     //发送消息,线程安全
@@ -164,22 +157,4 @@ public class TcpClient {
     public Channel getChannel() {
         return channel;
     }
-
-    //测试
-    public static void main(String[] args) {
-
-        new Thread(new Runnable() {
-            @Override
-            public void run() {
-                TcpClient.getInstance().init("47.106.200.55",5080, 9);
-            }
-        }).start();
-
-        Scanner scanner = new Scanner(System.in);
-        while (true){
-            System.out.println("please type : ");
-            String line = scanner.nextLine();
-            TcpClient.getInstance().sendMsg(line);
-        }
-    }
 }