liuf 1 год назад
Родитель
Сommit
f504849ad0

+ 6 - 0
src/main/java/com/tmzn/devicelinkykc/frameMsg/frameType/LoginFrame.java

@@ -43,6 +43,11 @@ public class LoginFrame {
     private GdDispostionService gdDispostionService;
     private GdDispostionService gdDispostionService;
 
 
     public void loginMsgSend(DeviceConnectionMsg deviceConnectionMsg,Device device){
     public void loginMsgSend(DeviceConnectionMsg deviceConnectionMsg,Device device){
+        if(deviceConnectionMsg.getLoginMsgSend()) {
+            log.info("has send login msg {}", device.getPileCode());
+            return;
+        }
+
         byte[] send = new byte[0];
         byte[] send = new byte[0];
         try {
         try {
             if(deviceConnectionMsg.getIs18()){
             if(deviceConnectionMsg.getIs18()){
@@ -61,6 +66,7 @@ public class LoginFrame {
                 deviceConnectionMsg.getOutputStream().write(bytes);
                 deviceConnectionMsg.getOutputStream().write(bytes);
                 deviceConnectionMsg.getOutputStream().flush();
                 deviceConnectionMsg.getOutputStream().flush();
                 deviceConnectionMsg.incrementMessageCount();
                 deviceConnectionMsg.incrementMessageCount();
+                deviceConnectionMsg.setLoginMsgSend();
             } catch (IOException e) {
             } catch (IOException e) {
                 log.info("pileCode:" + device.getPileCode() + " ,login push frame Exception");
                 log.info("pileCode:" + device.getPileCode() + " ,login push frame Exception");
                 e.printStackTrace();
                 e.printStackTrace();

+ 2 - 2
src/main/java/com/tmzn/devicelinkykc/message/DeviceMsgHandle.java

@@ -248,10 +248,10 @@ public class DeviceMsgHandle {
             logger.info("{}已禁用{}", imei, pileCode);
             logger.info("{}已禁用{}", imei, pileCode);
             return false;
             return false;
         }
         }
-        socketHandle.addDeviceConnection(device.getIp(), device.getPort(), device.getPileCode(), device.getDeviceImei(), device.getDeviceSn(), device.getCommProtocolVer());
+        boolean res = socketHandle.addDeviceConnection(device.getIp(), device.getPort(), device.getPileCode(), device.getDeviceImei(), device.getDeviceSn(), device.getCommProtocolVer());
 
 
         try{
         try{
-            Thread.sleep(300);
+            Thread.sleep(500);
             loginFrame.loginMsgSend(socketHandle.getDeviceConnection(device.getPileCode()), device);
             loginFrame.loginMsgSend(socketHandle.getDeviceConnection(device.getPileCode()), device);
         }catch (Exception e){
         }catch (Exception e){
         }
         }

+ 2 - 1
src/main/java/com/tmzn/devicelinkykc/message/YkcMsgHandle.java

@@ -269,9 +269,10 @@ public class YkcMsgHandle {
         int login_result = respone_msg[7] & 0xFF;
         int login_result = respone_msg[7] & 0xFF;
         if (ResultUtil.isSuccess(login_result)) {
         if (ResultUtil.isSuccess(login_result)) {
             //登录成功,相当于初始化心跳包接收时间更新,初始化心跳包时间相当于登录成功,心跳包能正常上传
             //登录成功,相当于初始化心跳包接收时间更新,初始化心跳包时间相当于登录成功,心跳包能正常上传
-            logger.info("{}login successfully", deviceConnectionMsg.getDeviceId());
             deviceConnectionMsg.setHeartTime(System.currentTimeMillis());
             deviceConnectionMsg.setHeartTime(System.currentTimeMillis());
             deviceConnectionMsg.setLoginStatus(Constant.DEVICE_LOGIN_STATUS);
             deviceConnectionMsg.setLoginStatus(Constant.DEVICE_LOGIN_STATUS);
+            logger.info("{}login successfully", deviceConnectionMsg.getDeviceId());
+
             return true;
             return true;
         } else {
         } else {
             logger.info("{}login failed ,waitting for retry", deviceConnectionMsg.getDeviceId());
             logger.info("{}login failed ,waitting for retry", deviceConnectionMsg.getDeviceId());

+ 9 - 0
src/main/java/com/tmzn/devicelinkykc/socket/DeviceConnectionMsg.java

@@ -24,6 +24,7 @@ public class DeviceConnectionMsg {
     private boolean is18;
     private boolean is18;
     private String ver;
     private String ver;
     private long loginTime;
     private long loginTime;
+    private boolean loginMsgSend;
 
 
     public DeviceConnectionMsg(Socket socket, String deviceId,String imei,String deviceSn,String ver) {
     public DeviceConnectionMsg(Socket socket, String deviceId,String imei,String deviceSn,String ver) {
         this.heartTime= 0L;
         this.heartTime= 0L;
@@ -42,6 +43,7 @@ public class DeviceConnectionMsg {
             this.inputStream = new BufferedInputStream(socket.getInputStream()) ;
             this.inputStream = new BufferedInputStream(socket.getInputStream()) ;
             this.outputStream =new BufferedOutputStream(socket.getOutputStream()) ;
             this.outputStream =new BufferedOutputStream(socket.getOutputStream()) ;
             this.loginTime = System.currentTimeMillis();
             this.loginTime = System.currentTimeMillis();
+            this.loginMsgSend = false;
         } catch (IOException e) {
         } catch (IOException e) {
             e.printStackTrace();
             e.printStackTrace();
         }
         }
@@ -134,4 +136,11 @@ public class DeviceConnectionMsg {
     }
     }
 
 
     public long getLoginTime(){return loginTime;}
     public long getLoginTime(){return loginTime;}
+
+    public boolean getLoginMsgSend(){
+        return loginMsgSend;
+    }
+    public void setLoginMsgSend(){
+        this.loginMsgSend = true;
+    }
 }
 }

+ 20 - 9
src/main/java/com/tmzn/devicelinkykc/socket/SocketHandle.java

@@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
 import java.io.IOException;
 import java.io.IOException;
+import java.net.InetSocketAddress;
 import java.net.Socket;
 import java.net.Socket;
 import java.util.Map;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentHashMap;
@@ -31,22 +32,32 @@ public class SocketHandle {
     @Autowired
     @Autowired
     private YkcMsgHandle ykcMsgHandle;
     private YkcMsgHandle ykcMsgHandle;
 
 
-    public synchronized void addDeviceConnection(String ip, int port, String deviceId, String imei, String deviceSn, String ver) throws IOException {
+    public synchronized boolean addDeviceConnection(String ip, int port, String deviceId, String imei, String deviceSn, String ver) throws IOException {
         if (deviceConnectionMsgMap.containsKey(deviceId)) {
         if (deviceConnectionMsgMap.containsKey(deviceId)) {
             log.info("已存在登录{}",imei);
             log.info("已存在登录{}",imei);
-            return;
+            return  true;
         }
         }
         log.info("请求登录{},版本:{}",imei,ver);
         log.info("请求登录{},版本:{}",imei,ver);
         //思考:这里的Socket的IP和端口从数据库查询到,云快充的device库中加字段保存IP和地址,根据桩后台传的设备SN码确定设备是对接的那个厂家的平台
         //思考:这里的Socket的IP和端口从数据库查询到,云快充的device库中加字段保存IP和地址,根据桩后台传的设备SN码确定设备是对接的那个厂家的平台
         //Socket socket = new Socket("114.55.7.88", 8781);
         //Socket socket = new Socket("114.55.7.88", 8781);
         //集测
         //集测
-        Socket socket = new Socket(ip, port);
-        socket.setKeepAlive(true);
-        DeviceConnectionMsg deviceConnectionMsg = new DeviceConnectionMsg(socket, deviceId,imei,deviceSn,ver);
-        //每个设备连接后开启监听接收消息
-        ykcMsgHandle.startListening(deviceConnectionMsg);
-        //并将连接信息等保存再Map中
-        deviceConnectionMsgMap.put(deviceId, deviceConnectionMsg);
+        try {
+
+            Socket socket = new Socket();
+            socket.connect(new InetSocketAddress(ip, port), 5000);
+            socket.setKeepAlive(true);
+            DeviceConnectionMsg deviceConnectionMsg = new DeviceConnectionMsg(socket, deviceId,imei,deviceSn,ver);
+            //每个设备连接后开启监听接收消息
+            ykcMsgHandle.startListening(deviceConnectionMsg);
+            //并将连接信息等保存再Map中
+            deviceConnectionMsgMap.put(deviceId, deviceConnectionMsg);
+            return true;
+        } catch (IOException e) {
+            // 连接失败,捕获IOException异常
+            log.info("{}-{}-{}连接失败: " + e.getMessage(),imei,ip,port);
+            return false;
+        }
+
     }
     }
 
 
     public void removeDeviceConnection(String deviceId) {
     public void removeDeviceConnection(String deviceId) {

+ 1 - 0
src/main/java/com/tmzn/devicelinkykc/taskQueue/runner/MsgHeartRunner.java

@@ -77,6 +77,7 @@ public class MsgHeartRunner {
             }
             }
         }
         }
 
 
+
         DeviceStatus oneDs = redisCache.getCacheMapValue(portStatusCacheKey, devicePileCode);
         DeviceStatus oneDs = redisCache.getCacheMapValue(portStatusCacheKey, devicePileCode);
         if(oneDs==null){
         if(oneDs==null){
             log.info("not found ones:{}",devicePileCode);
             log.info("not found ones:{}",devicePileCode);