wuhb 2 years ago
parent
commit
060e474f7a

+ 39 - 8
app/src/main/java/com/qy/agv/activity/ControlActivity.java

@@ -10,6 +10,7 @@ import android.content.Intent;
 import android.content.ServiceConnection;
 import android.graphics.drawable.ColorDrawable;
 import android.os.Bundle;
+import android.os.Handler;
 import android.os.IBinder;
 import android.util.DisplayMetrics;
 import android.view.Gravity;
@@ -401,36 +402,48 @@ public class ControlActivity extends BaseActivity {
     }
 
     private void sendCommand(String cmd, String...args){
+        String id = socketService.getSendID();
+        boolean rs = false;
         switch (cmd){
             case "rise":
-                socketService.sendOrder("HriseT");
+                rs = socketService.sendData("Hrise,"+id+",T");
                 break;
             case "decline":
-                socketService.sendOrder("HdeclineT");
+                rs = socketService.sendData("Hdecline,"+id+",T");
                 break;
             case "forward":
                 binding.robotState.setText(speed + "米/秒");
-                socketService.sendOrder("Hforward,"+speed+"T");
+                rs = socketService.sendData("Hforward,"+id+","+speed+"T");
                 break;
             case "back":
                 binding.robotState.setText(speed + "米/秒");
-                socketService.sendOrder("Hback,"+speed+"T");
+                rs = socketService.sendData("Hback,"+id+","+speed+"T");
                 break;
             case "left":
                 binding.robotState.setText(speed + "米/秒");
-                socketService.sendOrder("Hleft,"+speed+"T");
+                rs = socketService.sendData("Hleft,"+id+","+speed+"T");
                 break;
             case "right":
                 binding.robotState.setText(speed + "米/秒");
-                socketService.sendOrder("Hright,"+speed+"T");
+                rs = socketService.sendData("Hright,"+id+","+speed+"T");
                 break;
             case "stop":
-                socketService.sendOrder("HstopT");
+                rs = socketService.sendData("Hstop,"+id+",T");
                 break;
             case "cdw":
-                socketService.sendOrder("Hcdw,"+args[0]+"T");
+                rs = socketService.sendData("Hcdw,"+id+","+args[0]+"T");
+                if(rs){
+                    socketService.checkID.put(id, new String[]{"重定位成功", "重定位失败"});
+                    checkCDW(id, 3);
+                }
+                break;
+            case "cdwtx":
+                socketService.sendData("Hcdwtx,"+id+",T");
                 break;
         }
+        if(!rs){
+            ToastUtils.showToast(context, "发送失败");
+        }
     }
 
     private void selPosition(){
@@ -479,6 +492,9 @@ public class ControlActivity extends BaseActivity {
         popupWindow.setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
         setBackgroundAlpha(0.5f);
         popupWindow.showAtLocation(view, Gravity.CENTER, 0, 0);
+        popupWindow.setOnDismissListener(()->{
+            setBackgroundAlpha(1.0f);
+        });
     }
 
     public void setBackgroundAlpha(float bgAlpha) {
@@ -487,6 +503,21 @@ public class ControlActivity extends BaseActivity {
         getWindow().setAttributes(lp);
     }
 
+    private void checkCDW(String seqID, int flag){
+        if(flag == 0){
+            socketService.checkID.remove(seqID);
+            return;
+        }
+        flag = flag -1;
+        if(socketService.checkID.containsKey(seqID)){
+            int finalFlag = flag;
+            new Handler().postDelayed(()->{
+                sendCommand("cdwtx");
+                checkCDW(seqID, finalFlag);
+            }, 1000);
+        }
+    }
+
     @Override
     protected void onDestroy() {
         super.onDestroy();

+ 42 - 37
app/src/main/java/com/qy/agv/receiver/SocketService.java

@@ -1,5 +1,6 @@
 package com.qy.agv.receiver;
 
+import static com.qy.agv.util.Constant.DATETIME_CONTINUOUS_FORMATE;
 import static com.qy.agv.util.Constant.TIME_FORMATE;
 
 import android.app.Service;
@@ -27,6 +28,10 @@ import java.net.Socket;
 import java.net.SocketException;
 import java.net.SocketTimeoutException;
 import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.Timer;
 import java.util.TimerTask;
 import java.util.concurrent.TimeUnit;
@@ -54,6 +59,8 @@ public class SocketService extends Service {
     public static Logger mylog =Logger.getLogger(SocketService.class);
     private final Intent intent = new Intent(Constant.RECEIVER_MSG);
     private Long lastTime = 0L;
+    private int bleSeq = 0;
+    public volatile Map<String, String[]> checkID = new HashMap<>();
 
 
     @Override
@@ -115,7 +122,6 @@ public class SocketService extends Service {
                         e.printStackTrace();
                         if (e instanceof SocketTimeoutException) {
                             mylog.error("连接超时,正在重连");
-                            showMsg("连接失败");
                             try {
                                 Thread.sleep(1000);
                             } catch (InterruptedException ex) {
@@ -125,12 +131,10 @@ public class SocketService extends Service {
 
                         } else if (e instanceof NoRouteToHostException) {
                             mylog.error("地址不存在,请检查");
-                            showMsg("连接失败");
                             stopSelf();
 
                         } else if (e instanceof ConnectException) {
                             mylog.error("连接异常或被拒绝,请检查");
-                            showMsg("连接失败");
                             try {
                                 Thread.sleep(5000);
                             } catch (InterruptedException ex) {
@@ -146,15 +150,28 @@ public class SocketService extends Service {
         }
     }
 
-    private void showMsg(String msg){
-//        intent.putExtra("msg", msg);
-//        intent.putExtra("json","");
-//        sendBroadcast(intent);
-    }
 
-    private void showCommand(String msg){
-        intent.putExtra("json", msg);
-        sendBroadcast(intent);
+    private void showCommand(String rec){
+        if(!rec.contains(",")){
+            mylog.error("无效信息");
+            return;
+        }
+        String recID = rec.split(",")[1];
+        if(checkID.containsKey(recID)){
+            String[] str = checkID.get(rec);
+            if(str == null){
+                return;
+            }
+            if(rec.contains("1T")) {
+                toastMsg(str[0]);
+            }else{
+                toastMsg(str[1]);
+            }
+            checkID.remove(rec);
+        }else {
+            intent.putExtra("json", rec);
+            sendBroadcast(intent);
+        }
     }
 
     /*因为Toast是要运行在主线程的   所以需要到主线程哪里去显示toast*/
@@ -167,33 +184,25 @@ public class SocketService extends Service {
         });
     }
 
-    public void sendToRobot(String toRobot, String msg){
-        msg = toRobot + ":" + msg;
-        sendOrder(msg);
-    }
-
-    public void sendToServer(String msg){
-        msg = "execute:" + msg;
-        sendOrder(msg);
-    }
-
     /*发送数据*/
-    public void sendOrder(final String json) {
+    public boolean sendData(final String json) {
         if (socket != null && socket.isConnected()) {
             /*发送指令*/
             new Thread(new Runnable() {
                 @Override
                 public void run() {
                     try {
-                        tcpClient(json, 0);
+                        tcpClient(json);
                     } catch (Exception e) {
                         e.printStackTrace();
                     }
                 }
             }).start();
+            return true;
         } else {
             toastMsg("机器人未连接,请重试");
         }
+        return false;
     }
 
     /*定时发送数据*/
@@ -216,11 +225,9 @@ public class SocketService extends Service {
                         String msg = "HpingT";
                         outputStream.write((msg+"\n").getBytes(StandardCharsets.UTF_8));
                         outputStream.flush();
-                        showMsg("连接成功");
                     } catch (Exception e) {
                         /*发送失败说明socket断开了或者出现了其他错误*/
                         toastMsg("连接断开,正在重连");
-                        showMsg("连接中断");
                         /*重连*/
                         releaseSocket();
                         e.printStackTrace();
@@ -231,7 +238,7 @@ public class SocketService extends Service {
         timer.schedule(task, 0, 10000);
     }
 
-    public void rec(){
+    private void rec(){
         try{
             while (true) {
                 if(socket!=null && !socket.isInputShutdown()) {
@@ -244,21 +251,12 @@ public class SocketService extends Service {
                         }
                         inMsg = inMsg + System.getProperty("line.separator");
                         inMsg = inMsg.replace("\n", "");
-                        if (inMsg.equals("HpongT")
-                                || inMsg.equals("HokT")) {
-                            lastTime = System.currentTimeMillis();
-                            continue;
-                        }
-                        if (inMsg.equals("HerrorT")) {
-                            toastMsg("无效指令");
-                            continue;
-                        }
+                        lastTime = System.currentTimeMillis();
                         mylog.info("received: " + inMsg);
                         if (!StringUtils.isEmpty(inMsg)) {
                             showCommand(inMsg);
                         }
                     }catch (SocketException ex){
-                        showMsg("指令发送异常");
                         TimeUnit.SECONDS.sleep(5);
                     }catch (Exception ex){
                         mylog.error(ex);
@@ -272,7 +270,7 @@ public class SocketService extends Service {
         }
     }
 
-    public void tcpClient(String json, int flag){
+    private void tcpClient(String json){
         try{
             if(socket == null){
                 throw new SocketException("重新连接");
@@ -337,6 +335,13 @@ public class SocketService extends Service {
 
     }
 
+    public String getSendID() {
+        bleSeq++;
+        if (bleSeq > 9) {
+            bleSeq = 0;
+        }
+        return DateUtil.getCurrDate(DATETIME_CONTINUOUS_FORMATE) + "" + bleSeq;
+    }
 
     @Override
     public void onDestroy() {

+ 1 - 0
app/src/main/java/com/qy/agv/util/Constant.java

@@ -19,6 +19,7 @@ public class Constant {
     public final static String TIME_FORMATE = "HHmmss";
 
     public static String HTTP_URL = "http://106.14.107.152:8100/api";
+//    public static String HTTP_URL = "http://192.168.1.107:8081";
     public static String ACCESS_TOKEN = "";
     public static String REFRESH_TOKEN = "";
     public static String TENANT_ID = "000000";