shjung 9 месяцев назад
Родитель
Сommit
7d18a52692

+ 1 - 1
evps-comm-server/src/main/java/com/evps/comm/server/scheduler/ApplicationScheduler.java

@@ -42,7 +42,7 @@ public class ApplicationScheduler {
 
 //    @ScheduleElapsed
     @Async
-    @Scheduled(cron = "20 * * * * *")  // 1분주기 작업 실행
+    @Scheduled(cron = "30 * * * * *")  // 1분주기 작업 실행
     public void loadTraceConfig() {
         try {
             this.traceConfig.loadTraceInfo();

+ 73 - 0
evps-comm-server/src/main/java/com/evps/comm/server/xnet/server/process/response/EvpsNetPing.java

@@ -0,0 +1,73 @@
+package com.evps.comm.server.xnet.server.process.response;
+
+import com.evps.comm.server.kafka.KafkaProducerService;
+import com.evps.comm.server.process.dbms.DbmsData;
+import com.evps.comm.server.process.dbms.DbmsDataProcess;
+import com.evps.comm.server.repository.ApplicationRepository;
+import com.evps.common.dto.EvpsCenter;
+import com.evps.common.kafka.dto.KafkaEvpsEventDto;
+import com.evps.common.kafka.dto.KafkaEvpsServiceDto;
+import com.evps.common.kafka.dto.KafkaEvpsNetPingDto;
+import com.evps.common.kafka.dto.KafkaEvpsServiceEndDto;
+import com.evps.common.protocol.EvpsProtocolConst;
+import com.evps.common.protocol.response.EvpsCommResponse;
+import com.evps.common.protocol.response.RecvPacketDto;
+import com.evps.common.utils.EvpsUtils;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.slf4j.MDC;
+
+/*
+SEQUENCE          일련번호        Integer     4
+ */
+
+@Slf4j
+@AllArgsConstructor
+public class EvpsNetPing implements EvpsCommResponse {
+    private final DbmsDataProcess dbmsDataProcess;
+    private final KafkaProducerService kafkaProducerService;
+
+    @Override
+    public boolean response(RecvPacketDto packet) {
+        boolean result = true;
+        try {
+            MDC.put("id", packet.getCenter().getLogKey());
+            log.info("[{}], EvpsNetPing.response.", packet.getCenter().getLogKey());
+
+            return makeData(packet, packet.getPacket().getBuffer());
+        }
+        catch (Exception e) {
+            log.error("[{}], EvpsNetPing.response: Exception. will be closed. {}", packet.getCenter().getLogKey(), e.getMessage());
+            result = false;
+        }
+        finally {
+            MDC.remove(packet.getCenter().getLogKey());
+            MDC.clear();
+        }
+        return result;
+    }
+
+//    private KafkaEvpsNetPingDto getData(String serviceId, byte[] buffer, int idx) {
+//        long sequenceNumber = ((long) (buffer[idx++] & 0xFF) << 24) | ((buffer[idx++] & 0xFF) << 16) | ((buffer[idx++] & 0xFF) << 8) | (buffer[idx++] & 0xFF);
+//        return KafkaEvpsNetPingDto.builder()
+//                .serviceId(serviceId)
+//                .sequenceNumber(sequenceNumber)
+//                .build();
+//    }
+
+    private boolean makeData(RecvPacketDto packet, byte[] buffer) {
+        EvpsCenter center = packet.getCenter();
+        if (buffer == null || buffer.length != EvpsProtocolConst.EVENT_SERVICE_END_SIZE) {
+            log.error("[{}], EvpsNetPing.response: Data Length Error: Required data length({}), Cur({}). will be closed.",
+                    center.getLogKey(), EvpsProtocolConst.EVENT_SERVICE_END_SIZE, buffer == null ? 0 : buffer.length);
+            return false;
+        }
+
+//        KafkaEvpsNetPingDto data = getData(packet.getPacket().getServiceId(), buffer, 0);
+
+        int idx = 0;
+        long sequenceNumber = ((long) (buffer[idx++] & 0xFF) << 24) | ((buffer[idx++] & 0xFF) << 16) | ((buffer[idx++] & 0xFF) << 8) | (buffer[idx++] & 0xFF);
+        log.info("[{}], EvpsNetPing.response: Service Id: {}, SequenceNumber: {}", center.getLogKey(), packet.getPacket().getServiceId(), sequenceNumber);
+        return true;
+    }
+}

+ 3 - 0
evps-comm-server/src/main/java/com/evps/comm/server/xnet/server/process/work/DataPacketProcess.java

@@ -80,6 +80,9 @@ public class DataPacketProcess {
                 case EVPS_SERVICE_END:
                     response = new EvpsServiceEnd(this.dbmsDataProcess, this.kafkaProducerService);
                     break;
+                case EVPS_NET_PING:
+                    response = new EvpsNetPing(this.dbmsDataProcess, this.kafkaProducerService);
+                    break;
             }
             if (response != null) {
                 if (!response.response(packet)) {

+ 2 - 0
evps-comm-server/src/test/java/com/evps/comm/server/EvpsCommServerApplicationTest.java

@@ -73,9 +73,11 @@ public class EvpsCommServerApplicationTest {
 
     @Test
     void testDate() {
+        byte[] bF0 = {(byte)-16};
         log.info("{}", toString(new Date()));
         log.info("{}", EvpsUtils.getClctDt());
         log.info("{}", TestUtils.run());
+        log.info("{}", ByteUtils.byteArrayToHex(bF0));
     }
 //
 //    @Test

+ 27 - 0
evps-common/src/main/java/com/evps/common/kafka/dto/KafkaEvpsNetPingDto.java

@@ -0,0 +1,27 @@
+package com.evps.common.kafka.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+* 긴급차량 네트워크 연결 확인 정보
+*/
+@Data
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class KafkaEvpsNetPingDto {
+
+    /**
+    * 긴급차량 서비스 ID
+    */
+    private String serviceId;
+
+    /**
+    * 일련번호
+    */
+    private Long sequenceNumber;
+
+}

+ 2 - 1
evps-common/src/main/java/com/evps/common/protocol/eEvpsOpCode.java

@@ -11,7 +11,8 @@ public enum eEvpsOpCode {
     EVPS_NODE        ( (byte)0x15, "경로 내의 교차로/현시구성 정보"),
     EVPS_EVENT       ( (byte)0x16, "긴급차량의 위치와 속도 정보"),
     EVPS_SIGNAL      ( (byte)0x17, "긴급차량의 위치에서 진행방향의 각 교차로까지의 남은거리 및 현시현황"),
-    EVPS_SERVICE_END ( (byte)0x18, "긴급차량 서비스 종료"); // 사용 안함(예비)
+    EVPS_SERVICE_END ( (byte)0x18, "긴급차량 서비스 종료"),
+    EVPS_NET_PING    ( (byte)0xF0, "네트워크 연결 확인");
 
     @Getter
     private final byte value;