| | |
| | | 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; |
| | |
| | | import javax.annotation.PostConstruct; |
| | | import javax.crypto.Cipher; |
| | | import javax.crypto.spec.SecretKeySpec; |
| | | 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 |
| | | public class UavService implements IUavService { |
| | | public static final String USERNAME = "ardbailu";//用户名 |
| | | public static final String PASSWORD = "ardkj12345";//密码 |
| | | public static final String SALT = "0123456789012345";//盐 |
| | | @Slf4j(topic = "uav") |
| | | public class UavService { |
| | | /*uav: |
| | | host: http://112.98.126.2:6100/ |
| | | username: kaifabailu |
| | | password: ardkj@2014 |
| | | salt: 0123456789012345 |
| | | */ |
| | | private String username;//用户名 |
| | | |
| | | //token 登陆后每次请求,在header中携带 |
| | | private String token;//登录成功返回的token |
| | | 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(); |
| | | //创建无人机Websocket客户端 |
| | | createWebsocketCients(); |
| | | } |
| | | |
| | | @Override |
| | | 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 |
| | |
| | | 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) { |
| | | throw new RuntimeException(ex); |
| | | } catch (InvocationTargetException ex) { |
| | | throw new RuntimeException(ex); |
| | | } |
| | | 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; |
| | | } |
| | | |
| | | @Override |
| | | public void login() { |
| | | String codedPassword = this.Encrypt(PASSWORD, SALT); |
| | | String body = "{\"username\":\"" + USERNAME + "\",\"password\":\"" + codedPassword + "\"}"; |
| | | public Map getUavUser() { |
| | | 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.POST("login", null, body); |
| | | Map resMap = om.readValue(res, Map.class); |
| | | Map data = (Map) resMap.get("data"); |
| | | if (data != null) { |
| | | this.token = (String) data.get("access_token"); |
| | | 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; |
| | | } |
| | | } catch (ForestNetworkException e) { |
| | | e.printStackTrace(); |
| | | } catch (JsonMappingException e) { |
| | | throw new RuntimeException(e); |
| | | } catch (JsonProcessingException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | return token; |
| | | } |
| | | |
| | | public void login() { |
| | | |
| | | getUavConfig(); |
| | | log.debug("登录无人机外部接口"); |
| | | String codedPassword = this.Encrypt(password, salt); |
| | | String body = "{\"username\":\"" + username + "\",\"password\":\"" + codedPassword + "\"}"; |
| | | log.debug("body:" + body); |
| | | try { |
| | | //uavClient.GET("logout", null, "{}"); |
| | | String res = uavClient.POST(this.host+"login", null, body); |
| | | Map resMap = om.readValue(res, Map.class); |
| | | if (resMap != null&& resMap.get("data") instanceof Map) { |
| | | redisCache.setCacheMap("uav:uavUser", (Map) resMap.get("data")); |
| | | } |
| | | } catch (ForestRuntimeException e) { |
| | | log.error("无人机连接超时" + e.getMessage()); |
| | | } catch (JsonMappingException e) { |
| | | } catch (JsonProcessingException e) { |
| | | } 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){//判断是否为null |
| | | 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); |
| | | } |
| | | |
| | | |
| | | public String Encrypt(String sSrc, String sKey) { |
| | | if (sKey == null) { |
| | | System.out.print("Key为空null"); |
| | | return null; |
| | | } |
| | | // 判断Key是否为16位 |
| | | if (sKey.length() != 16) { |
| | | System.out.print("Key长度不是16位"); |
| | | return null; |
| | | } |
| | | byte[] encrypted = null; |
| | |
| | | encrypted = cipher.doFinal(sSrc.getBytes("utf-8")); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | ; |
| | | } |
| | | return new Base64().encodeToString(encrypted);//此处使用BASE64做转码功能,同时能起到2次加密的作用。 |
| | | } |