From a889e603481b5f3f6cf0074af1f25f94b571db8c Mon Sep 17 00:00:00 2001
From: yy1717 <fctom1215@outlook.com>
Date: 星期二, 21 一月 2020 15:01:46 +0800
Subject: [PATCH] Merge branch 'master' of https://gitee.com/endian11/DriveJudge

---
 app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java |  233 +++++++++++++++++++++++++++++++++++-----------------------
 1 files changed, 140 insertions(+), 93 deletions(-)

diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java
index 8f30081..559f021 100644
--- a/app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java
+++ b/app/src/main/java/safeluck/drive/evaluation/fragment/MapFragment.java
@@ -6,8 +6,8 @@
 import android.graphics.Color;
 import android.graphics.Paint;
 import android.graphics.Path;
-import android.opengl.GLSurfaceView;
 import android.os.Bundle;
+import android.os.Handler;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.SurfaceHolder;
@@ -15,7 +15,6 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.LinearLayout;
-import android.widget.Toast;
 
 import androidx.annotation.NonNull;
 import androidx.annotation.Nullable;
@@ -32,6 +31,9 @@
 
 import java.lang.reflect.Type;
 import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.LinkedBlockingQueue;
 
 import me.yokeyword.fragmentation.SupportFragment;
 import safeluck.drive.evaluation.Constant;
@@ -52,6 +54,36 @@
  */
 public class MapFragment extends SupportFragment {
     private boolean isDrawing = false;
+    private ICEventListener rtcmicEventListener = new ICEventListener() {
+        @Override
+        public void onCEvent(String topic, int msgCode, int resultCode, final Object obj) {
+            if (msgCode == Constant.DEBUG_RTCM){
+
+                CThreadPoolExecutor.runOnMainThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        Log.i(TAG, "title="+(String)obj);
+                        toolbar.setTitle((String)obj);
+                    }
+                });
+                }
+        }
+    };
+    private ICEventListener debugTxticEventListener = new ICEventListener() {
+        @Override
+        public void onCEvent(String topic, int msgCode, int resultCode, final Object obj) {
+            if (msgCode == Constant.DEBUG_TXT){
+                CThreadPoolExecutor.runOnMainThread(new Runnable() {
+                    @Override
+                    public void run() {
+                        Log.i(TAG, "subtitle="+(String)obj);
+                        toolbar.setSubtitle((String)obj);
+                    }
+                });
+
+            }
+        }
+    };
 
     public static SupportFragment newInstance() {
         return new MapFragment();
@@ -80,6 +112,9 @@
             , {9.278, -1.5330000000000004}, {9.277999999999999, 1.467000000000001}};
     Gson gson;
     private LinearLayout linearLayout;//surfaceview鐨勭埗瀹瑰櫒锛屼负浜嗙Щ鍔╯urfaceview鑰屼娇鐢紝鍥犱负scrollto涓嶈兘绉诲姩view锛�
+    private LinkedBlockingQueue queue = new LinkedBlockingQueue(100);
+    private ExecutorService producer = Executors.newSingleThreadExecutor();
+    private ExecutorService consumer = Executors.newSingleThreadExecutor();
 
 
     @Nullable
@@ -88,6 +123,7 @@
         View view = inflater.inflate(R.layout.layout_mapfragment, container, false);
         gson = new Gson();
         initView(view);
+        consumer.execute(new CalRunnable());
         return view;
     }
 
@@ -282,12 +318,12 @@
                     pathText.lineTo(700, 30);
                     canvas2.drawTextOnPath(osd2, pathText, 0, 0, paint);//閫嗘椂閽堢敓鎴�
                 }
-                if (osd3 != null) {
-                    Path pathText = new Path();
-                    pathText.moveTo(10, 240);
-                    pathText.lineTo(700, 130);
-                    canvas2.drawTextOnPath(osd2, pathText, 0, 0, paint);//閫嗘椂閽堢敓鎴�
-                }
+//                if (osd3 != null) {
+//                    Path pathText = new Path();
+//                    pathText.moveTo(10, 240);
+//                    pathText.lineTo(700, 130);
+//                    canvas2.drawTextOnPath(osd2, pathText, 0, 0, paint);//閫嗘椂閽堢敓鎴�
+//                }
 
                 // 鎻愪氦鐢诲竷
                 Canvas canvas = holder.lockCanvas();
@@ -329,83 +365,83 @@
     int line = 0;
     int map_line = 0;
     private StringBuffer stringBuffer = new StringBuffer();
+    class MessageRemoteService{
+        public int msgCode;
+        public String json;
+
+        public MessageRemoteService(int msgCode, Object obj) {
+            this.json = (String) obj;
+            this.msgCode = msgCode;
+        }
+    }
     private ICEventListener icEventListener = new ICEventListener() {
         @Override
-        public void onCEvent(String topic, int msgCode, int resultCode, Object obj) {
+        public void onCEvent(String topic, final int msgCode, int resultCode, final Object obj) {
 
-            CThreadPoolExecutor.runInBackground(new CalRunnable(msgCode,(String)obj));
+
+            producer.execute(new Runnable() {
+                @Override
+                public void run() {
+                    queue.offer(new MessageRemoteService(msgCode,obj));
+                }
+            });
+
 
         }
     };
+    boolean flag = true;
     class CalRunnable implements Runnable{
 
         private String json;
         private int cmd;
-        public CalRunnable(int cmd,String obj) {
-           this.json = obj;
-           this.cmd = cmd;
-        }
 
         @Override
         public void run() {
-            MyLog.i(TAG, json);
-            if (!(cmd == Constant.REAL_TIME_CAR_POS)){
-                if (cmd == Constant.DEBUG_RTCM){
-                    stringBuffer.append("\tRTCM:");
+            while (flag){
+                MessageRemoteService messageRemoteService = (MessageRemoteService) queue.peek();
+                if (messageRemoteService == null){
                     try {
-                        JSONObject jsonObject = new JSONObject(json);
-                        int length = jsonObject.getInt("length");
-                        stringBuffer.append(length);
-                    } catch (JSONException e) {
+                        Thread.sleep(100);
+                    } catch (InterruptedException e) {
                         e.printStackTrace();
                     }
                 }
-                if (cmd == Constant.DEBUG_TXT){
-                    try {
-                        JSONObject jsonObject = new JSONObject(json);
-                        String info = jsonObject.getString("info");
-                        stringBuffer.append("\tinfo:");
-                        stringBuffer.append(info);
-                    } catch (JSONException e) {
-                        e.printStackTrace();
+                messageRemoteService = (MessageRemoteService) queue.poll();
+                if (messageRemoteService != null){
+                    this.cmd = messageRemoteService.msgCode;
+                    this.json = messageRemoteService.json;
+                    MyLog.i(TAG, json);
+
+
+                    RealTimeCarPos timeCarPos = gson.fromJson((String) json, RealTimeCarPos.class);
+                    List<Double> points = timeCarPos.getPoint();
+                    switch (timeCarPos.getMove()){
+                        case 0:
+                            osd2 = "鍋滆溅";
+                            break;
+                        case 1:
+                            osd2 = "鍓嶈繘";
+                            break;
+                        case -1:
+                            osd2 = "鍚庨��";
+                            break;
                     }
+                    osd="鏂瑰悜瑙�"+String.valueOf(timeCarPos.getHeading());
+                    line = 0;
+                    map_line = 0;
 
-                }
-            }
-            osd3 = stringBuffer.toString();
-            if (osd3!=null && osd3.contains("info:")&&osd3.contains("RTCM:")){
+                    for (int i = 0; i < points.size(); i++) {
+                        if ((i % 2) == 0) {
+                            car[line][0] = points.get(i);
+                        } else {
+                            double value = 0 - points.get(i);
+                            Log.i(TAG, "onCEvent: 鏂板��=" + value + " 浣嶇疆锛�" + i);
+                            car[line][1] = value;
+                            line++;
+                        }
 
-                stringBuffer.delete(0,stringBuffer.length());
-            }
-            RealTimeCarPos timeCarPos = gson.fromJson((String) json, RealTimeCarPos.class);
-            List<Double> points = timeCarPos.getPoint();
-            switch (timeCarPos.getMove()){
-                case 0:
-                    osd2 = "鍋滆溅";
-                    break;
-                case 1:
-                    osd2 = "鍓嶈繘";
-                    break;
-                case -1:
-                    osd2 = "鍚庨��";
-                    break;
-            }
-            osd="鏂瑰悜瑙�"+String.valueOf(timeCarPos.getHeading());
-            line = 0;
-            map_line = 0;
-
-            for (int i = 0; i < points.size(); i++) {
-                if ((i % 2) == 0) {
-                    car[line][0] = points.get(i);
-                } else {
-                    double value = 0 - points.get(i);
-                    Log.i(TAG, "onCEvent: 鏂板��=" + value + " 浣嶇疆锛�" + i);
-                    car[line][1] = value;
-                    line++;
-                }
-
-            }
-            map_id = timeCarPos.getMap_id();
+                    }
+                    map_id = timeCarPos.getMap_id();
 //            1 - 鍊掑簱
 //            2 - 鍧¤捣
 //            3 - 渚ф柟鍋滆溅
@@ -413,56 +449,67 @@
 //            5 - 鐩磋杞集
 
 
-            StringBuffer buffer = FileUtil.readTxtFileFromSD(_mActivity,Constant.MAP);
-            Type type = new TypeToken<List<ExamMap>>(){}.getType();
-            if (buffer != null){
-                List<ExamMap> examMaps = gson.fromJson(buffer.toString().trim(), type);
+                    StringBuffer buffer = FileUtil.readTxtFileFromSD(_mActivity,Constant.MAP);
+                    Type type = new TypeToken<List<ExamMap>>(){}.getType();
+                    if (buffer != null){
+                        List<ExamMap> examMaps = gson.fromJson(buffer.toString().trim(), type);
 
 
 
-                for (int i = 0; i < examMaps.size(); i++) {
-                    ExamMap examMap = examMaps.get(i);
-                    if (map_id == examMap.getId()){
-                        List<ExamMap.PointBean> pointBeanList = examMap.getPoint();
+                        for (int i = 0; i < examMaps.size(); i++) {
+                            ExamMap examMap = examMaps.get(i);
+                            if (map_id == examMap.getId()){
+                                List<ExamMap.PointBean> pointBeanList = examMap.getPoint();
 
 
-                        for(int j=0; j<pointBeanList.size();j++){
-                            List<Double> xys = pointBeanList.get(i).getXy();
-                            if(j==0){
-                                map = new double[xys.size()/2][2];
-                            }else{
-                                MyLog.i(TAG,"鏆傛椂杩樹笉鏀寔鏇茬嚎");
+                                for(int j=0; j<pointBeanList.size();j++){
+                                    List<Double> xys = pointBeanList.get(i).getXy();
+                                    if(j==0){
+                                        map = new double[xys.size()/2][2];
+                                    }else{
+                                        MyLog.i(TAG,"鏆傛椂杩樹笉鏀寔鏇茬嚎");
+                                        break;
+                                    }
+
+                                    for (int k=0; k<xys.size();k++){
+                                        if ((k % 2) == 0) {
+                                            map[map_line][0] = xys.get(k);
+                                        } else {
+                                            double value = 0 - xys.get(k);
+                                            Log.i(TAG, "onCEvent: map鏂板��=" + value + " 浣嶇疆锛�" + i);
+                                            map[map_line][1] = value;
+                                            map_line++;
+                                        }
+                                    }
+
+                                }
                                 break;
                             }
-
-                            for (int k=0; k<xys.size();k++){
-                                if ((k % 2) == 0) {
-                                    map[map_line][0] = xys.get(k);
-                                } else {
-                                    double value = 0 - xys.get(k);
-                                    Log.i(TAG, "onCEvent: map鏂板��=" + value + " 浣嶇疆锛�" + i);
-                                    map[map_line][1] = value;
-                                    map_line++;
-                                }
-                            }
-
                         }
-                        break;
                     }
+                    DrawMap(map,car);
                 }
+
             }
-            DrawMap(map,car);
+
         }
     }
     @Override
     public void onAttach(Context context) {
         super.onAttach(context);
         CEventCenter.onBindEvent(true, icEventListener, Constant.REAL_TIME_POS_CAR_TOPIC);
+        CEventCenter.onBindEvent(true, rtcmicEventListener, Constant.BIND_RTCM_TOPIC);
+        CEventCenter.onBindEvent(true, debugTxticEventListener, Constant.BIND_DEBUG_TXT);
     }
 
     @Override
     public void onDetach() {
         super.onDetach();
+        flag = false;
+        producer.shutdown();
+        consumer.shutdown();
         CEventCenter.onBindEvent(false, icEventListener, Constant.REAL_TIME_POS_CAR_TOPIC);
+        CEventCenter.onBindEvent(false, icEventListener, Constant.BIND_RTCM_TOPIC);
+        CEventCenter.onBindEvent(false, icEventListener, Constant.BIND_DEBUG_TXT);
     }
 }

--
Gitblit v1.8.0