From 0abccf5e570dce53a802bca4ce25118dd900692c Mon Sep 17 00:00:00 2001
From: aijinhui <aijinhui>
Date: 星期五, 23 二月 2024 14:07:21 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 ard-work/src/main/java/com/ruoyi/device/uav/service/UavService.java |  495 +++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 461 insertions(+), 34 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/device/uav/service/UavService.java b/ard-work/src/main/java/com/ruoyi/device/uav/service/UavService.java
index 5af9367..3ce9f56 100644
--- a/ard-work/src/main/java/com/ruoyi/device/uav/service/UavService.java
+++ b/ard-work/src/main/java/com/ruoyi/device/uav/service/UavService.java
@@ -1,12 +1,23 @@
 package com.ruoyi.device.uav.service;
 
+import com.alibaba.fastjson.JSON;
 import com.dtflys.forest.exceptions.ForestNetworkException;
+import com.dtflys.forest.exceptions.ForestRuntimeException;
 import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.JsonMappingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
+import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.utils.ConfigUtils;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.device.uav.websocketclient.UAVWebsocketClient;
+import com.ruoyi.sy.controller.ArdSyCarController;
 import com.ruoyi.utils.forest.UavClient;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.collections4.map.HashedMap;
+import org.java_websocket.WebSocket;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpMethod;
 
 import org.springframework.beans.factory.annotation.Autowired;
@@ -18,27 +29,62 @@
 import java.io.IOException;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
-import java.util.Map;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.*;
 
 @Service
+@Slf4j(topic = "uav")
 public class UavService {
-    public static final String USERNAME = "ardbailu";//鐢ㄦ埛鍚�
-    public static final String PASSWORD = "ardkj12345";//瀵嗙爜
-    public static final String SALT = "0123456789012345";//鐩�
+    /*uav:
+      host: http://112.98.126.2:6100/
+      username: kaifabailu
+      password: ardkj@2014
+      salt: 0123456789012345
+      */
+    private String username;//鐢ㄦ埛鍚�
 
-    //token 鐧婚檰鍚庢瘡娆¤姹�,鍦╤eader涓惡甯�
-    private String token;//鐧诲綍鎴愬姛杩斿洖鐨則oken
+    private String password;//瀵嗙爜
+
+    private String salt; //鐩�
+
+    private String host;//uav鏈嶅姟鍣�11
+
+
     private Map uavUser;//鐧诲綍鐨勭敤鎴蜂俊鎭�
     private ObjectMapper om = new ObjectMapper();
+
+    private Map<String, UAVWebsocketClient> UAVWebsocketClientMap = new HashedMap();
+
+    private String token;
+
     @Autowired
     private UavClient uavClient;
+    @Autowired
+    private RedisCache redisCache;
 
     @PostConstruct
     public void created() {
+
+        getUavConfig();
         this.login();
+        //鍒涘缓鏃犱汉鏈篧ebsocket瀹㈡埛绔�
+        createWebsocketCients();
+    }
+
+    private void getUavConfig() {
+        this.host = ConfigUtils.getConfigValue("uav_host");
+        this.username = ConfigUtils.getConfigValue("uav_username");
+        this.password = ConfigUtils.getConfigValue("uav_password");
+        this.salt = ConfigUtils.getConfigValue("uav_salt");
+        if (StringUtils.isEmpty(this.host) || StringUtils.isEmpty(this.username) || StringUtils.isEmpty(this.password) || StringUtils.isEmpty(this.salt)) {
+            throw new RuntimeException("鏃犱汉鏈哄弬鏁伴厤缃己澶�:");
+        }
     }
 
     public String doUavRequest(HttpMethod method, String url, String data) {
+
+        getUavConfig();
         String res = null;
         Method requestMethod = null;
         //鑾峰彇method
@@ -48,54 +94,435 @@
             e.printStackTrace();
         }
         //鎵цmethod
+       // this.getToken();//鑾峰彇token楠岃瘉,楠岃瘉token鏈夋晥鎬�
         try {
-            res = (String) requestMethod.invoke(this.uavClient, url, this.token, data);
-        } catch (InvocationTargetException e) {
-            ForestNetworkException fe = (ForestNetworkException) e.getCause();
-            if (fe.getStatusCode() == 401) {//token澶辨晥,閲嶆柊鐧诲綍
-                this.login();
-            }
-            try {//鍐嶆璋冪敤鎺ュ彛
-                res = (String) requestMethod.invoke(this.uavClient, url, this.token, data);
-            } catch (IllegalAccessException ex) {
-                ex.printStackTrace();
-            } catch (InvocationTargetException ex) {
-                ex.printStackTrace();
-            }
+            String token = this.getToken();
+            res = (String) requestMethod.invoke(this.uavClient, this.host + url, token, data);
         } catch (IllegalAccessException e) {
-            throw new RuntimeException(e);
+            System.out.println("doUavRequest 璁块棶澶辫触");
+            System.out.println(url);
+            log.error("doUavRequest 璁块棶澶辫触" + e.getMessage());
+        } catch (InvocationTargetException e) {
+            System.out.println("doUavRequest 鎵ц澶辫触");
+            System.out.println(url);
+            log.error("doUavRequest 鎵ц澶辫触" + e.getMessage());
+            e.printStackTrace();
         }
 
         return res;
     }
 
     public Map getUavUser() {
-        if (this.uavUser==null){
-            this.login();
+        return redisCache.getCacheMap("uav:uavUser");
+    }
+
+    public String getToken() {
+        //鑾峰彇uav鐢ㄦ埛淇℃伅
+        Map uavUser = redisCache.getCacheMap("uav:uavUser");
+        String token = (String) uavUser.get("access_token");
+        //楠岃瘉token鏈夋晥鎬�
+        try {
+            String res = uavClient.GET(this.host+"manage/api/v1/devices", token, "{}");
+            res+="";
+            //System.out.println(res);
+
+            //token璧嬪��
+            this.token = token;
+        } catch (ForestNetworkException fe) {
+            if (fe.getStatusCode() == 401) {//token澶辨晥,閲嶆柊鐧诲綍
+                this.login();
+                //鍐嶆鑾峰彇token
+                uavUser = redisCache.getCacheMap("uav:uavUser");
+                token = (String) uavUser.get("access_token");
+                //token璧嬪��
+                this.token = token;
+                return token;
+            }
         }
-        return this.uavUser;
+        return token;
     }
 
     public void login() {
-        System.out.println("鐧诲綍鏃犱汉鏈哄閮ㄦ帴鍙�");
-        String codedPassword = this.Encrypt(PASSWORD, SALT);
-        String body = "{\"username\":\"" + USERNAME + "\",\"password\":\"" + codedPassword + "\"}";
+
+        getUavConfig();
+        log.debug("鐧诲綍鏃犱汉鏈哄閮ㄦ帴鍙�");
+        String codedPassword = this.Encrypt(password, salt);
+        String body = "{\"username\":\"" + username + "\",\"password\":\"" + codedPassword + "\"}";
+        log.debug("body:" + body);
         try {
-            String res = uavClient.POST("login", null, body);
+            //uavClient.GET("logout", null, "{}");
+            String res = uavClient.POST(this.host+"login", null, body);
             Map resMap = om.readValue(res, Map.class);
-            this.uavUser = (Map) resMap.get("data");
-            if (this.uavUser != null) {
-                this.token = (String) this.uavUser.get("access_token");
+            if (resMap != null&& resMap.get("data") instanceof Map) {
+                redisCache.setCacheMap("uav:uavUser", (Map) resMap.get("data"));
             }
-        } catch (ForestNetworkException e) {
-            e.printStackTrace();
+        } catch (ForestRuntimeException e) {
+            log.error("鏃犱汉鏈鸿繛鎺ヨ秴鏃�" + e.getMessage());
         } catch (JsonMappingException e) {
-            e.printStackTrace();
         } catch (JsonProcessingException e) {
-            e.printStackTrace();
         } catch (IOException e) {
+        }
+    }
+
+    public void createWebsocketCients(){
+        /*String ip = this.host.replace("http://", "");
+        if(this.UAVWebsocketClientMap.get("status") != null && this.UAVWebsocketClientMap.get("control") != null){
+            //鏃犱汉鏈虹姸鎬佺伃娲�
+            UAVWebsocketClient uavStatusWebsocketClient = this.UAVWebsocketClientMap.get("status");
+            uavStatusWebsocketClient.getHeartBeatTimer().cancel();
+            uavStatusWebsocketClient.close();
+            //鏃犱汉鏈烘帶鍒剁伃娲�
+            UAVWebsocketClient uavControlWebsocketClient = this.UAVWebsocketClientMap.get("control");
+            uavControlWebsocketClient.getHeartBeatTimer().cancel();
+            uavControlWebsocketClient.close();
+
+            this.UAVWebsocketClientMap.remove("status");
+            this.UAVWebsocketClientMap.remove("control");
+        }
+
+        String uavStatusWsURL = "ws://" + ip + "api/v1/ws?x-auth-token=" + token;
+        System.out.println(uavStatusWsURL);
+        UAVWebsocketClient uavStatusWebsocketClient;
+        try {
+            uavStatusWebsocketClient = new UAVWebsocketClient(new URI(uavStatusWsURL));
+            uavStatusWebsocketClient.connect();
+            System.out.println("杩炴帴涓�傘�傘��");
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+            if(!uavStatusWebsocketClient.getReadyState().equals(WebSocket.READYSTATE.OPEN)){
+                uavStatusWebsocketClient.close();
+                return;
+            }
+            Date date = new Date();
+            Timer heartBeatTimer = new Timer();
+            TimerTask heartBeatTask = new TimerTask(){
+                public void run(){
+                    Map<String,Object> para = new HashMap();
+                    para.put("biz_code", "user_cmd");
+                    para.put("version", "1.0");
+                    Date date = new Date();
+                    para.put("time_stamp", String.valueOf(date.getTime()));
+                    Map<String,String> payload = new HashMap();
+                    payload.put("timeStamp", String.valueOf(date.getTime()));
+                    Map<String,Object> data = new HashMap();
+                    data.put("dataHead", "0x7479");
+                    data.put("cmdCode", "0x02");
+                    data.put("payload", payload);
+                    para.put("data", data);
+                    try{
+                        uavStatusWebsocketClient.send(JSON.toJSONString(para));
+                        System.out.println("鏃犱汉鏈虹姸鎬佸績璺冲彂閫�");
+                    }catch(Exception e){
+                        e.printStackTrace();
+                        System.out.println(uavStatusWebsocketClient.getServerUri());
+                    }
+                }
+            };
+            uavStatusWebsocketClient.setHeartBeatTimer(heartBeatTimer);
+            heartBeatTimer.scheduleAtFixedRate(heartBeatTask,date,10*1000);
+            this.UAVWebsocketClientMap.put("status", uavStatusWebsocketClient);
+        } catch (NumberFormatException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (URISyntaxException e) {
+            // TODO Auto-generated catch block
             e.printStackTrace();
         }
+
+        String uavControlWsURL = "ws://" + ip + "api/v1/ws/cmd?x-auth-token=" + token;
+        System.out.println(uavControlWsURL);
+        UAVWebsocketClient uavControlWebsocketClient;
+        try {
+            uavControlWebsocketClient = new UAVWebsocketClient(new URI(uavControlWsURL));
+            uavControlWebsocketClient.connect();
+            System.out.println("杩炴帴涓�傘�傘��");
+            try {
+                Thread.sleep(1000);
+            } catch (InterruptedException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+            if(!uavControlWebsocketClient.getReadyState().equals(WebSocket.READYSTATE.OPEN)){
+                //鏃犱汉鏈虹姸鎬佺伃娲�
+                UAVWebsocketClient uavStatusWebsocketClient0 =  this.UAVWebsocketClientMap.get("status");
+                uavStatusWebsocketClient0.getHeartBeatTimer().cancel();
+                uavStatusWebsocketClient0.close();
+
+                uavControlWebsocketClient.close();
+                return;
+            }
+            Date date = new Date();
+            Timer heartBeatTimer = new Timer();
+            TimerTask heartBeatTask = new TimerTask(){
+                public void run(){
+                    Map<String,Object> para = new HashMap();
+                    para.put("biz_code", "user_cmd");
+                    para.put("version", "1.0");
+                    Date date = new Date();
+                    para.put("time_stamp", String.valueOf(date.getTime()));
+                    Map<String,String> payload = new HashMap();
+                    payload.put("timeStamp", String.valueOf(date.getTime()));
+                    Map<String,Object> data = new HashMap();
+                    data.put("dataHead", "0x7479");
+                    data.put("cmdCode", "0x02");
+                    data.put("payload", payload);
+                    para.put("data", data);
+                    try{
+                        uavControlWebsocketClient.send(JSON.toJSONString(para));
+                        System.out.println("鏃犱汉鏈烘帶鍒跺績璺冲彂閫�");
+                    }catch(Exception e){
+                        e.printStackTrace();
+                        System.out.println(uavControlWebsocketClient.getServerUri());
+                    }
+                }
+            };
+            uavControlWebsocketClient.setHeartBeatTimer(heartBeatTimer);
+            heartBeatTimer.scheduleAtFixedRate(heartBeatTask,date,10*1000);
+            this.UAVWebsocketClientMap.put("control", uavControlWebsocketClient);
+        } catch (NumberFormatException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        } catch (URISyntaxException e) {
+            // TODO Auto-generated catch block
+            e.printStackTrace();
+        }*/
+        String ip = this.host.replace("http://", "");
+        Date date = new Date();
+        Timer heartBeatTimer = new Timer();
+        TimerTask heartBeatTask = new TimerTask(){
+            public void run(){
+                if(token != null){//鍒ゆ柇鏄惁涓簄ull
+                    if(UAVWebsocketClientMap.get("status") != null && UAVWebsocketClientMap.get("control") != null){
+                        String oldURL = UAVWebsocketClientMap.get("status").getServerUri().toString();
+                        String oldToken = oldURL.split("x-auth-token=")[1];
+                        if(!oldToken.equals(token)){//token鏇存柊浠庢柊鍒涘缓瀹㈡埛绔�
+                            //鍘熷鎴风鐏椿
+                            UAVWebsocketClientMap.get("status").close();//鏃犱汉鏈虹姸鎬佺伃娲�
+                            UAVWebsocketClientMap.get("control").close();//鏃犱汉鏈烘帶鍒剁伃娲�
+                            UAVWebsocketClientMap.remove("status");
+                            UAVWebsocketClientMap.remove("control");
+
+                            String uavStatusWsURL = "ws://" + ip + "api/v1/ws?x-auth-token=" + token;
+                            UAVWebsocketClient uavStatusWebsocketClient = null;
+                            try {
+                                uavStatusWebsocketClient = new UAVWebsocketClient(new URI(uavStatusWsURL));
+                                uavStatusWebsocketClient.connect();
+                                System.out.println("杩炴帴涓�傘�傘��");
+                                try {
+                                    Thread.sleep(1000);
+                                } catch (InterruptedException e) {
+                                    // TODO Auto-generated catch block
+                                    e.printStackTrace();
+                                }
+                                if(!uavStatusWebsocketClient.getReadyState().equals(WebSocket.READYSTATE.OPEN)){
+                                    uavStatusWebsocketClient.close();
+                                    uavStatusWebsocketClient = null;
+                                }
+                            } catch (NumberFormatException e) {
+                                // TODO Auto-generated catch block
+                                e.printStackTrace();
+                            } catch (URISyntaxException e) {
+                                // TODO Auto-generated catch block
+                                e.printStackTrace();
+                            }
+
+                            String uavControlWsURL = "ws://" + ip + "api/v1/ws/cmd?x-auth-token=" + token;
+                            UAVWebsocketClient uavControlWebsocketClient = null;
+                            try {
+                                uavControlWebsocketClient = new UAVWebsocketClient(new URI(uavControlWsURL));
+                                uavControlWebsocketClient.connect();
+                                System.out.println("杩炴帴涓�傘�傘��");
+                                try {
+                                    Thread.sleep(1000);
+                                } catch (InterruptedException e) {
+                                    // TODO Auto-generated catch block
+                                    e.printStackTrace();
+                                }
+                                if(!uavControlWebsocketClient.getReadyState().equals(WebSocket.READYSTATE.OPEN)){
+                                    //鏃犱汉鏈虹姸鎬佺伃娲�
+                                    UAVWebsocketClient uavStatusWebsocketClient0 =  UAVWebsocketClientMap.get("status");
+                                    uavStatusWebsocketClient0.close();
+
+                                    uavControlWebsocketClient.close();
+                                    uavStatusWebsocketClient0 = null;
+                                    uavControlWebsocketClient = null;
+                                    //return;
+                                }
+                            } catch (NumberFormatException e) {
+                                // TODO Auto-generated catch block
+                                e.printStackTrace();
+                            } catch (URISyntaxException e) {
+                                // TODO Auto-generated catch block
+                                e.printStackTrace();
+                            }
+                            if(uavStatusWebsocketClient != null || uavControlWebsocketClient != null){
+                                UAVWebsocketClientMap.put("status", uavStatusWebsocketClient);
+                                UAVWebsocketClientMap.put("control", uavControlWebsocketClient);
+
+                                Map<String,Object> para = new HashMap();
+                                para.put("biz_code", "user_cmd");
+                                para.put("version", "1.0");
+                                Date date = new Date();
+                                para.put("time_stamp", String.valueOf(date.getTime()));
+                                Map<String,String> payload = new HashMap();
+                                payload.put("timeStamp", String.valueOf(date.getTime()));
+                                Map<String,Object> data = new HashMap();
+                                data.put("dataHead", "0x7479");
+                                data.put("cmdCode", "0x02");
+                                data.put("payload", payload);
+                                para.put("data", data);
+                                try{
+                                    uavStatusWebsocketClient.send(JSON.toJSONString(para));
+                                    uavControlWebsocketClient.send(JSON.toJSONString(para));
+                                    //System.out.println("鏃犱汉鏈哄績璺冲彂閫�");
+                                }catch(Exception e){
+                                    e.printStackTrace();
+                                    System.out.println(uavStatusWebsocketClient.getServerUri());
+                                    System.out.println(uavControlWebsocketClient.getServerUri());
+                                    //鏃犱汉鏈虹姸鎬佺伃娲�
+                                    uavStatusWebsocketClient = UAVWebsocketClientMap.get("status");
+                                    uavStatusWebsocketClient.close();
+                                    //鏃犱汉鏈烘帶鍒剁伃娲�
+                                    uavControlWebsocketClient = UAVWebsocketClientMap.get("control");
+                                    uavControlWebsocketClient.close();
+
+                                    UAVWebsocketClientMap.remove("status");
+                                    UAVWebsocketClientMap.remove("control");
+                                }
+                            }
+                        }else{
+                            Map<String,Object> para = new HashMap();
+                            para.put("biz_code", "user_cmd");
+                            para.put("version", "1.0");
+                            Date date = new Date();
+                            para.put("time_stamp", String.valueOf(date.getTime()));
+                            Map<String,String> payload = new HashMap();
+                            payload.put("timeStamp", String.valueOf(date.getTime()));
+                            Map<String,Object> data = new HashMap();
+                            data.put("dataHead", "0x7479");
+                            data.put("cmdCode", "0x02");
+                            data.put("payload", payload);
+                            para.put("data", data);
+                            UAVWebsocketClient uavStatusWebsocketClient = UAVWebsocketClientMap.get("status");
+                            UAVWebsocketClient uavControlWebsocketClient = UAVWebsocketClientMap.get("control");
+                            try{
+                                uavStatusWebsocketClient.send(JSON.toJSONString(para));
+                                uavControlWebsocketClient.send(JSON.toJSONString(para));
+                                //System.out.println("鏃犱汉鏈哄績璺冲彂閫�");
+                            }catch(Exception e){
+                                e.printStackTrace();
+                                System.out.println(uavStatusWebsocketClient.getServerUri());
+                                System.out.println(uavControlWebsocketClient.getServerUri());
+                                //鏃犱汉鏈虹姸鎬佺伃娲�
+                                uavStatusWebsocketClient = UAVWebsocketClientMap.get("status");
+                                uavStatusWebsocketClient.close();
+                                //鏃犱汉鏈烘帶鍒剁伃娲�
+                                uavControlWebsocketClient = UAVWebsocketClientMap.get("control");
+                                uavControlWebsocketClient.close();
+
+                                UAVWebsocketClientMap.remove("status");
+                                UAVWebsocketClientMap.remove("control");
+                            }
+                        }
+                    }else{
+                        String uavStatusWsURL = "ws://" + ip + "api/v1/ws?x-auth-token=" + token;
+                        System.out.println(uavStatusWsURL);
+                        UAVWebsocketClient uavStatusWebsocketClient = null;
+                        try {
+                            uavStatusWebsocketClient = new UAVWebsocketClient(new URI(uavStatusWsURL));
+                            uavStatusWebsocketClient.connect();
+                            System.out.println("杩炴帴涓�傘�傘��");
+                            try {
+                                Thread.sleep(1000);
+                            } catch (InterruptedException e) {
+                                // TODO Auto-generated catch block
+                                e.printStackTrace();
+                            }
+                            if(!uavStatusWebsocketClient.getReadyState().equals(WebSocket.READYSTATE.OPEN)){
+                                uavStatusWebsocketClient.close();
+                                uavStatusWebsocketClient = null;
+                            }
+                        } catch (NumberFormatException e) {
+                            // TODO Auto-generated catch block
+                            e.printStackTrace();
+                        } catch (URISyntaxException e) {
+                            // TODO Auto-generated catch block
+                            e.printStackTrace();
+                        }
+
+                        String uavControlWsURL = "ws://" + ip + "api/v1/ws/cmd?x-auth-token=" + token;
+                        System.out.println(uavControlWsURL);
+                        UAVWebsocketClient uavControlWebsocketClient = null;
+                        try {
+                            uavControlWebsocketClient = new UAVWebsocketClient(new URI(uavControlWsURL));
+                            uavControlWebsocketClient.connect();
+                            System.out.println("杩炴帴涓�傘�傘��");
+                            try {
+                                Thread.sleep(1000);
+                            } catch (InterruptedException e) {
+                                // TODO Auto-generated catch block
+                                e.printStackTrace();
+                            }
+                            if(!uavControlWebsocketClient.getReadyState().equals(WebSocket.READYSTATE.OPEN)){
+                                //鏃犱汉鏈虹姸鎬佺伃娲�
+                                UAVWebsocketClient uavStatusWebsocketClient0 =  UAVWebsocketClientMap.get("status");
+                                uavStatusWebsocketClient0.close();
+
+                                uavControlWebsocketClient.close();
+                                uavStatusWebsocketClient0 = null;
+                                uavControlWebsocketClient = null;
+                            }
+                        } catch (NumberFormatException e) {
+                            // TODO Auto-generated catch block
+                            e.printStackTrace();
+                        } catch (URISyntaxException e) {
+                            // TODO Auto-generated catch block
+                            e.printStackTrace();
+                        }
+                        if(uavStatusWebsocketClient != null || uavControlWebsocketClient != null){
+                            UAVWebsocketClientMap.put("status", uavStatusWebsocketClient);
+                            UAVWebsocketClientMap.put("control", uavControlWebsocketClient);
+
+                            Map<String,Object> para = new HashMap();
+                            para.put("biz_code", "user_cmd");
+                            para.put("version", "1.0");
+                            Date date = new Date();
+                            para.put("time_stamp", String.valueOf(date.getTime()));
+                            Map<String,String> payload = new HashMap();
+                            payload.put("timeStamp", String.valueOf(date.getTime()));
+                            Map<String,Object> data = new HashMap();
+                            data.put("dataHead", "0x7479");
+                            data.put("cmdCode", "0x02");
+                            data.put("payload", payload);
+                            para.put("data", data);
+                            try{
+                                uavStatusWebsocketClient.send(JSON.toJSONString(para));
+                                uavControlWebsocketClient.send(JSON.toJSONString(para));
+                                //System.out.println("鏃犱汉鏈哄績璺冲彂閫�");
+                            }catch(Exception e){
+                                e.printStackTrace();
+                                System.out.println(uavStatusWebsocketClient.getServerUri());
+                                System.out.println(uavControlWebsocketClient.getServerUri());
+                                //鏃犱汉鏈虹姸鎬佺伃娲�
+                                uavStatusWebsocketClient = UAVWebsocketClientMap.get("status");
+                                uavStatusWebsocketClient.close();
+                                //鏃犱汉鏈烘帶鍒剁伃娲�
+                                uavControlWebsocketClient = UAVWebsocketClientMap.get("control");
+                                uavControlWebsocketClient.close();
+
+                                UAVWebsocketClientMap.remove("status");
+                                UAVWebsocketClientMap.remove("control");
+                            }
+                        }
+                    }
+                }
+            }
+        };
+        heartBeatTimer.scheduleAtFixedRate(heartBeatTask,date,10*1000);
     }
 
 

--
Gitblit v1.9.3