shjung 2 years ago
parent
commit
51b10ec8d3
35 changed files with 1308 additions and 38 deletions
  1. 8 0
      src/main/java/com/its/traf/TrafPrcsServerApplication.java
  2. 6 0
      src/main/java/com/its/traf/controller/its/TrafPrcs05MController.java
  3. 4 1
      src/main/java/com/its/traf/scheduler/UnitSystSchedulerTask.java
  4. 4 3
      src/main/java/com/its/traf/service/its/UnitSystService.java
  5. 214 0
      src/main/java/com/its/traf/xnet/center/protocol/CENTER_COMM_DEFINE.java
  6. 152 0
      src/main/java/com/its/traf/xnet/center/protocol/CENTER_COMM_MESSAGE.java
  7. 61 0
      src/main/java/com/its/traf/xnet/center/protocol/CENTER_PG_STATE_RES.java
  8. 50 0
      src/main/java/com/its/traf/xnet/center/protocol/CENTER_TRAFFIC_CHANGE.java
  9. 162 0
      src/main/java/com/its/traf/xnet/center/protocol/CENTER_VMS_COMM_MESSAGE.java
  10. 64 0
      src/main/java/com/its/traf/xnet/center/protocol/CENTER_VMS_REQ_COMMON.java
  11. 57 0
      src/main/java/com/its/traf/xnet/center/protocol/CENTER_VMS_REQ_LUMINANCE.java
  12. 39 0
      src/main/java/com/its/traf/xnet/center/protocol/CENTER_VMS_REQ_NOTIFY.java
  13. 8 0
      src/main/java/com/its/traf/xnet/center/protocol/CENTER_VMS_REQ_POWER.java
  14. 12 0
      src/main/java/com/its/traf/xnet/center/protocol/CENTER_VMS_REQ_RESET.java
  15. 1 1
      src/main/java/com/its/traf/xnet/center/protocol/CenterProtocol.java
  16. 1 1
      src/main/java/com/its/traf/xnet/center/protocol/CenterReqFrameHead.java
  17. 1 1
      src/main/java/com/its/traf/xnet/center/protocol/CenterReqFramePacket.java
  18. 1 1
      src/main/java/com/its/traf/xnet/center/protocol/CenterResProtocol.java
  19. 5 5
      src/main/java/com/its/traf/xnet/center/tcp/CenterCommTcpServer.java
  20. 5 5
      src/main/java/com/its/traf/xnet/center/tcp/codec/CenterTcpServerDecoder.java
  21. 2 2
      src/main/java/com/its/traf/xnet/center/tcp/codec/CenterTcpServerEncoder.java
  22. 1 1
      src/main/java/com/its/traf/xnet/center/tcp/handler/CenterTcpServerIdleStateHandler.java
  23. 2 2
      src/main/java/com/its/traf/xnet/center/tcp/handler/CenterTcpServerInboundHandler.java
  24. 1 1
      src/main/java/com/its/traf/xnet/center/tcp/handler/CenterTcpServerOutboundHandler.java
  25. 5 5
      src/main/java/com/its/traf/xnet/center/tcp/initializer/CenterTcpServerInitializer.java
  26. 87 0
      src/main/java/com/its/traf/xnet/center/udp/CenterCommUdpServer.java
  27. 83 0
      src/main/java/com/its/traf/xnet/center/udp/codec/CenterCommClientEncoder.java
  28. 53 0
      src/main/java/com/its/traf/xnet/center/udp/codec/CenterCommServerDecoder.java
  29. 53 0
      src/main/java/com/its/traf/xnet/center/udp/handler/CenterCommServerPacketHandler.java
  30. 9 0
      src/main/java/com/its/traf/xnet/center/udp/service/CenterCommResponseService.java
  31. 60 0
      src/main/java/com/its/traf/xnet/center/udp/service/TrafficNotifyDataSender.java
  32. 53 0
      src/main/java/com/its/traf/xnet/center/udp/thread/CenterCommClientSender.java
  33. 34 0
      src/main/java/com/its/traf/xnet/center/udp/thread/CenterCommServerReceiver.java
  34. 4 3
      src/main/resources/logback-spring.xml
  35. 6 6
      src/main/resources/mybatis/mapper/its/collect/LinkRawDataMOCT01.xml

+ 8 - 0
src/main/java/com/its/traf/TrafPrcsServerApplication.java

@@ -11,6 +11,8 @@ import com.its.traf.process.DbmsDataProcess;
 import com.its.traf.service.its.UnitSystService;
 import com.its.traf.ui.JTextAreaOutputStream;
 import com.its.traf.ui.MainUI;
+import com.its.traf.xnet.center.udp.CenterCommUdpServer;
+import com.its.traf.xnet.center.udp.service.TrafficNotifyDataSender;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.DisposableBean;
 import org.springframework.beans.factory.InitializingBean;
@@ -151,6 +153,12 @@ public class TrafPrcsServerApplication implements CommandLineRunner, Application
 //        TrafPrcs05MController testController = (TrafPrcs05MController)AppUtils.getBean(TrafPrcs05MController.class);
 //        testController.run();
 
+        CenterCommUdpServer centerCommUdpServer = (CenterCommUdpServer)AppUtils.getBean(CenterCommUdpServer.class);
+        centerCommUdpServer.run();
+
+        TrafficNotifyDataSender tess = (TrafficNotifyDataSender)AppUtils.getBean(TrafficNotifyDataSender.class);
+        tess.notifyTrafficPrcsCompleted("12345678901234");
+
         // schedule enable
         applicationConfig.setStartSchedule(true);
 

+ 6 - 0
src/main/java/com/its/traf/controller/its/TrafPrcs05MController.java

@@ -4,6 +4,7 @@ import com.its.app.utils.TimeUtils;
 import com.its.traf.global.AppRepository;
 import com.its.traf.global.eTrafPrcsJob;
 import com.its.traf.service.its.*;
+import com.its.traf.xnet.center.udp.service.TrafficNotifyDataSender;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Controller;
@@ -23,6 +24,7 @@ public class TrafPrcs05MController implements AbstractTrafPrcsController {
     private final TbVmsIfscService vmsIfscService;
     private final TrafPrcsCountService trafPrcsCountService;
     private final ExternalLinkService externalLinkService;
+    private final TrafficNotifyDataSender trafficNotifyDataSender;
 
     private String statTime;
     private String fromTime;
@@ -99,6 +101,10 @@ public class TrafPrcs05MController implements AbstractTrafPrcsController {
         // 가공 완료
         this.prcsTime.setProcessing(false);
 
+        // 가공완료 정보를 통보
+        this.trafficNotifyDataSender.notifyTrafficPrcsCompleted(this.prcsTime.getCurrTime());
+
         AppRepository.getInstance().endPrcsJob(eTrafPrcsJob.PRCS_05M_ALL, 0, true);
+
     }
 }

+ 4 - 1
src/main/java/com/its/traf/scheduler/UnitSystSchedulerTask.java

@@ -34,7 +34,10 @@ public class UnitSystSchedulerTask {
         //Elapsed elapsed = new Elapsed();
         //log.info("              UnitSystSchedule: start. {}", Thread.currentThread().getName());
         // 1. 프로세스 상태정보 업데이트
-        this.unitSystService.updateUnitSystStts(true);
+        boolean insHs = this.unitSystService.updateUnitSystStts(true);
+        if (insHs) {
+            this.unitSystService.loadMaster();
+        }
         //log.info("              UnitSystSchedule: ..end. {} ms. {}", elapsed.milliSeconds(), Thread.currentThread().getName());
     }
 

+ 4 - 3
src/main/java/com/its/traf/service/its/UnitSystService.java

@@ -84,10 +84,10 @@ public class UnitSystService {
                     log.info("[LOADING...] UnitSystService.loadMaster: _srcIpAddr: {}", UnitSystService._srcIpAddr);
                 }
 
-                if (unit.getSYST_TYPE().contentEquals("UOT")) {
+                //if (unit.getSYST_TYPE().contentEquals("UOT")) {
                     unit.setSYST_IP_1(unit.getSYST_IP_1().trim());
                     this.unitSystMap.put(unit.getSYST_ID(), unit);
-                }
+                //}
             }
         }
         catch (Exception e) {
@@ -95,7 +95,7 @@ public class UnitSystService {
         }
     }
 
-    public void updateUnitSystStts(boolean isRun) {
+    public boolean updateUnitSystStts(boolean isRun) {
         String keyData = "unit";
         MDC.put("id", keyData);
         boolean insHs = false;
@@ -125,5 +125,6 @@ public class UnitSystService {
         }
         MDC.remove(keyData);
         MDC.clear();
+        return insHs;
     }
 }

+ 214 - 0
src/main/java/com/its/traf/xnet/center/protocol/CENTER_COMM_DEFINE.java

@@ -0,0 +1,214 @@
+package com.its.traf.xnet.center.protocol;
+
+public class CENTER_COMM_DEFINE {
+
+	/*******************************************************************************
+	 * 시스템 ID
+	 *******************************************************************************/
+	public static final int INT_ID_TRAFFIC_SERVER		= 0x01;    /* 가공서버 */
+	public static final int INT_ID_SIGCTL_SERVER		= 0x02;    /* 신호제어서버 */
+	public static final int INT_ID_SIGCOM_SERVER		= 0x03;    /* 신호통신서버 */
+	public static final int INT_ID_VDS_SERVER			= 0x04;    /* VDS 서버 */
+	public static final int INT_ID_AVI_SERVER			= 0x05;    /* AVI 서버 */
+	public static final int INT_ID_DSRC_SERVER 			= 0x06;    /* DSRC 서버 */
+	public static final int INT_ID_VMS_SERVER 			= 0x07;    /* VMS 서버 */
+	public static final int INT_ID_CCTV_SERVER			= 0x08;    /* CCTV 서버 */
+	public static final int INT_ID_WEB_SERVER		   	= 0x09;    /* WEB 서버 */
+	public static final int INT_ID_UTIS_SERVER			= 0x0A;    /* UTIS 서버 */
+	public static final int INT_ID_KMA_SERVER			= 0x0B;    /* 기상청 연계 서버 */
+	public static final int INT_ID_WCAM_SERVER			= 0x0C;    /* 웹카메라 연계 서버 */
+	public static final int INT_ID_FCLT_SERVER			= 0x0D;    /* 시설물관리 서버 */
+	public static final int INT_ID_EXT01_SERVER			= 0x0E;    /* 연계 서버1 */
+	public static final int INT_ID_EXT02_SERVER			= 0x0F;    /* 연계 서버2 */
+	public static final int INT_ID_EXT03_SERVER			= 0x10;    /* 연계 서버3 */
+	public static final int INT_ID_CCAM_SERVER			= 0x11;    /* 교차로감시카메라 연계 서버 */
+	public static final int INT_ID_PARK_SERVER			= 0x12;    /* 주차장 연계 서버 */
+	public static final int INT_ID_RSE_SERVER			= 0x13;    /* RSE 연계 서버 */
+
+	public static final int INT_ID_MAIN_OPER 			= 0x21;    /* 통합운영단말 */
+	public static final int INT_ID_WALL_OPER 			= 0x22;    /* 상황판운영단말 */
+	public static final int INT_ID_SIG_OPER 			= 0x23;    /* 신호운영단말 */
+	public static final int INT_ID_VDS_OPER 			= 0x24;    /* VDS운영단말 */
+	public static final int INT_ID_AVI_OPER 			= 0x25;    /* AVI운영단말 */
+	public static final int INT_ID_DSRC_OPER 			= 0x26;    /* DSRC운영단말 */
+	public static final int INT_ID_VMS_OPER 			= 0x27;    /* VMS운영단말 */
+	public static final int INT_ID_CCTV_OPER 			= 0x28;    /* CCTV운영단말 */
+	public static final int INT_ID_FMS_OPER 			= 0x29;    /* 시설물관리단말 */
+	public static final int INT_ID_UTIS_OPER 			= 0x2A;    /* UTIS관리단말 */
+	public static final int INT_ID_WCAM_OPER 			= 0x2B;    /* WCAM관리단말 */
+
+	public static final int INT_ID_OPER_MIN 			= INT_ID_MAIN_OPER ;    /* 운영단말 최소값 */
+	public static final int INT_ID_OPER_MAX 			= INT_ID_WCAM_OPER ;    /* 운영단말 최대값 */
+
+	/*******************************************************************************
+	 * 프로토콜 OP CODE 정의
+	 *******************************************************************************/
+	public static final int INT_OP_TRAFFIC_CHANGE   	    = 0x10;        /* 교통정보가공완료 */
+	public static final int INT_OP_NODELINK_CHANGE          = 0x11;        /* 노드링크 기반 정보 변경 */
+	public static final int INT_OP_FACILITY_CHANGE          = 0x12;        /* 시설물 기반 정보 변경 */
+	public static final int INT_OP_PG_STATE_REQ             = 0x13;        /* 공통사항, 프로그램 동작상태 요청 */
+	public static final int INT_OP_PG_STATE_RES             = 0x14;        /* 공통사항, 프로그램 동작상태 응답 */
+	public static final int INT_OP_CHANGE_EVENT             = 0x15;        /* 공통사항, 마스터정보 변경 알림 */
+	public static final int INT_OP_INC_EVENT                = 0x16;        /* 공통사항, 돌발정보 전송 */
+	public static final int INT_OP_ACK                      = 0x17;        /* 공통사항, ACK(Acknowledge) */
+	public static final int INT_OP_NACK                     = 0x18;        /* 공통사항, NACK(Negative Acknowledge) */
+	public static final int INT_OP_EXTENSION                = 0x19;        /* 공통사항, EXTENSION 요청/응답 */
+
+	/*******************************************************************************
+	 * VMS Protocol OP Code
+	 *******************************************************************************/
+	public static final int INT_OP_VMS_STATE_REQ            = 0x21;        /* VMS 통신 서버, VMS 시설물 상태정보 요청 */
+	public static final int INT_OP_VMS_STATE_RES            = 0x22;        /* VMS 통신 서버, VMS 시설물 상태정보 전송 */
+	public static final int INT_OP_VMS_POWER_CTL            = 0x23;        /* VMS 통신 서버, VMS 전광판 On/Off 제어 */
+	public static final int INT_OP_VMS_LUMINANCE_CTL        = 0x24;        /* VMS 통신 서버, VMS 휘도 제어 */
+	//public static final int INT_OP_VMS_STATE_REQ            = 0x21;        /* VMS 통신 서버, VMS 시설물 상태정보 요청 */
+	//public static final int INT_OP_VMS_STATE_RES            = 0x22;        /* VMS 통신 서버, VMS 시설물 상태정보 전송 */
+	//public static final int INT_OP_VMS_POWER_CTL            = 0x23;        /* VMS 통신 서버, VMS 전광판 On/Off 제어 */
+	//public static final int INT_OP_VMS_LUMINANCE_CTL        = 0x24;        /* VMS 통신 서버, VMS 휘도 제어 */
+
+	public static final int INT_OP_VMS_PARA_SET             = 0x25;        /* VMS 통신 서버, VMS 환경설정정보 전송 */
+	public static final int INT_OP_VMS_PARA_SET2            = 0x26;        /* VMS 통신 서버, VMS 환경설정정보 전송(For Pasig) */
+	public static final int INT_OP_VMS_RESET                = 0x27;        /* VMS 통신 서버, VMS 제어기 리셋 전송 */
+	public static final int INT_OP_VMS_MODE                 = 0x28;        /* VMS 통신 서버, VMS 운영모드 변경 */
+	public static final int INT_OP_VMS_FORM_SAVE            = 0x29;        /* VMS 통신 서버, 실시간 VMS 제공정보 저장 */
+	public static final int INT_OP_VMS_FORM_DOWNLOAD        = 0x2A;        /* VMS 통신 서버, 실시간 VMS 제공정보 저장 */
+	public static final int INT_OP_VMS_IMAGE_SYMBOL         = 0x2B;        /* VMS image symbol update */
+	public static final int INT_OP_VMS_IMAGE_TRAFFIC        = 0x2C;        /* VMS image traffic update */
+	public static final int INT_OP_VMS_FORM_UPDATE          = 0x2D;        /* VMS form update */
+	public static final int INT_OP_VMS_IFSC_UPDATE          = 0x2E;        /* VMS ifsc update */
+
+	public static final int INT_OP_VMS_PARAM_RES            = 0x2F;        /* VMS 통신 서버, VMS 시설물 파라미터정보 전송 ==> 목포시 싸인텔레콤 추가 */
+
+	public static final int INT_OP_VMS_COMMON               = 0x30;        /* 신규로 생성될 명령어를 처리하기 위한 OP Code */
+	public static final int INT_OP_VMS_COMMON_EXT           = 0x31;        /* 신규로 생성될 명령어를 처리하기 위한 OP Code */
+	public static final int INT_OP_VMS_IMMEDIATE_SCN_DNLD   = 0x32;        /* 폼 즉시 다운로드 OP Code */
+	public static final int INT_OP_VMS_PARAM_REQ            = 0x33;        /* VMS 파라미터 요청 */
+	public static final int INT_OP_VMS_DIRECT               = 0x34;        /* VMS Direct command */
+//	public static final int INT_OP_VMS_PARA_SET             = 0x08;        /* VMS 통신 서버, VMS 환경설정정보 전송 */
+//	//public static final int INT_OP_VMS_PARA_SET             = 0x25;        /* VMS 통신 서버, VMS 환경설정정보 전송 */
+//	public static final int INT_OP_VMS_PARA_SET2            = 0x26;        /* VMS 통신 서버, VMS 환경설정정보 전송(For Pasig) */
+//	//public static final int INT_OP_VMS_RESET                = 0x27;        /* VMS 통신 서버, VMS 제어기 리셋 전송 */
+//	public static final int INT_OP_VMS_RESET                = 0x09;        /* VMS 통신 서버, VMS 제어기 리셋 전송 */
+//	public static final int INT_OP_VMS_MODE                 = 0x0A;        /* VMS 통신 서버, VMS 운영모드 변경 */
+//	//public static final int INT_OP_VMS_MODE                 = 0x28;        /* VMS 통신 서버, VMS 운영모드 변경 */
+//	public static final int INT_OP_VMS_FORM_SAVE            = 0x0B;        /* VMS 통신 서버, 실시간 VMS 제공정보 저장 */
+//	public static final int INT_OP_VMS_FORM_DOWNLOAD        = 0x0C;        /* VMS 통신 서버, 실시간 VMS 제공정보 다운로드 결과 저장 */
+//	//public static final int INT_OP_VMS_FORM_DOWNLOAD        = 0x2A;        /* VMS 통신 서버, 실시간 VMS 제공정보 저장 */
+//	//public static final int INT_OP_VMS_FORM_SAVE            = 0x29;        /* VMS 통신 서버, 실시간 VMS 제공정보 저장 */
+//	public static final int INT_OP_VMS_IMAGE_SYMBOL         = 0x10;        /* VMS image symbol update */
+//	//public static final int INT_OP_VMS_IMAGE_SYMBOL         = 0x2B;        /* VMS image symbol update */
+//	public static final int INT_OP_VMS_IMAGE_TRAFFIC        = 0x11;        /* VMS image traffic update */
+//	//public static final int INT_OP_VMS_IMAGE_TRAFFIC        = 0x2C;        /* VMS image traffic update */
+//	public static final int INT_OP_VMS_FORM_UPDATE          = 0x12;        /* VMS form update */
+//	//public static final int INT_OP_VMS_FORM_UPDATE          = 0x2D;        /* VMS form update */
+//	public static final int INT_OP_VMS_IFSC_UPDATE          = 0x13;        /* VMS ifsc update */
+//	//public static final int INT_OP_VMS_IFSC_UPDATE          = 0x2E;        /* VMS ifsc update */
+//
+//	public static final int INT_OP_VMS_PARAM_RES            = 0x2F;        /* VMS 통신 서버, VMS 시설물 파라미터정보 전송 ==> 목포시 싸인텔레콤 추가 */
+//
+//	public static final int INT_OP_VMS_COMMON               = 0x30;        /* 신규로 생성될 명령어를 처리하기 위한 OP Code */
+//	public static final int INT_OP_VMS_COMMON_EXT           = 0x31;        /* 신규로 생성될 명령어를 처리하기 위한 OP Code */
+//	public static final int INT_OP_VMS_IMMEDIATE_SCN_DNLD   = 0x32;        /* 폼 즉시 다운로드 OP Code */
+//	public static final int INT_OP_VMS_PARAM_REQ            = 0x33;        /* VMS 파라미터 요청 */
+//	public static final int INT_OP_VMS_DIRECT               = 0x34;        /* VMS Direct command */
+
+
+	/*******************************************************************************
+	 * VDS Protocol OP Code
+	 *******************************************************************************/
+	public static final int INT_OP_VDS_STOP_IMAGE_REQ       = 0x50;        /* VDS 통신 서버, VDS 정지영상 요청 */
+	public static final int INT_OP_VDS_STOP_IMAGE_RES       = 0x51;        /* VDS 통신 서버, VDS 정지영상 요청 응답 */
+	public static final int INT_OP_VDS_STATE_RES            = 0x52;        /* VDS 통신 서버, VDS 시설물 상태정보 전송 */
+	public static final int INT_OP_VDS_FAN_CONTROL          = 0x54;        /* VDS 통신 서버, VDS FAN 제어 */
+	public static final int INT_OP_VDS_RESET                = 0x59;        /* VDS 통신 서버, VDS 제어기 리셋 전송 */
+
+	public static final int INT_OP_VDS_PARAM_REQ            = 0x55;        /* VDS 통신 서버, VDS 파라미터 요청 */
+	public static final int INT_OP_VDS_PARAM_RES            = 0x56;        /* VDS 통신 서버, VDS 파라미터 요청 응답 */
+	public static final int INT_OP_VDS_PARAM_SET_REQ        = 0x57;        /* VDS 통신 서버, VDS 파라미터 설정 요청 */
+	public static final int INT_OP_VDS_PARAM_SET_RES        = 0x58;        /* VDS 통신 서버, VDS 파라미터 설정 요청 응답 */
+
+	/*******************************************************************************
+	 * DSRC Protocol OP Code
+	 *******************************************************************************/
+	public static final int INT_OP_DSRC_CONTROL_REQ         = 0x60;        /* DSRC 통신 서버, DSRC 제어 요청 */
+	public static final int INT_OP_DSRC_CONTROL_RES         = 0x61;        /* DSRC 통신 서버, DSRC 제어 요청 응답 */
+	public static final int INT_OP_DSRC_STATE_RES           = 0x62;        /* DSRC 통신 서버, DSRC 시설물 상태정보 전송 */
+
+
+	/*******************************************************************************
+	 * WCAM Protocol OP Code
+	 *******************************************************************************/
+	public static final int INT_OP_WCAM_STATE_RES           = 0x70;        /* WCAM 통신 서버, WCAM 시설물 상태정보 전송 */
+
+	/*******************************************************************************
+	 * CCAM Protocol OP Code
+	 *******************************************************************************/
+	public static final int INT_OP_CCAM_STATE_RES           = 0x71;        /* CCAM 통신 서버, CCAM 시설물 상태정보 전송 */
+
+	/*******************************************************************************
+	 * PARK Protocol OP Code
+	 *******************************************************************************/
+	public static final int INT_OP_PARK_STATE_RES           = 0x81;        /* PARK 통신 서버, PARK 시설물 상태정보 전송 */
+
+	/*******************************************************************************
+	 *  프로세스 상태정보 요청/응답
+	 *******************************************************************************/
+	public static final int INT_MAX_PG_STATE                = 146;        /* 최대 프로그램 상태정보 */
+
+	/*******************************************************************************
+	 *  돌발 발생 통보
+	 *******************************************************************************/
+	public static final int INT_INC_TIME_SIZE           = 14;        /* 'YYYYMMDDHH24MISS' */
+	public static final int INT_INC_ID_SIZE             = 12;        /* 돌발 ID */
+
+	/*******************************************************************************
+	 *  VMS
+	 *******************************************************************************/
+	public static final int INT_VMS_MAX_ID              = 15;       /* VMS 제어기 ID */
+	public static final int INT_VMS_MAX_MODULE          = 100;      /* 최대 VMS 모듈 */
+	public static final int INT_VMS_MAX_POWER           = 10;       /* 최대 VMS 전원 */
+	public static final int INT_VMS_MAX_MODULE_BIT      = 25;       /* 최대 VMS 모듈 비트*/
+	public static final int INT_VMS_MAX_POWER_BIT       = 2;        /* 최대 VMS 전원 비트 */
+	//public static final int INT_VMS_MAX_MODULE_BIT      = 100;      /* 최대 VMS 모듈 비트*/
+	//public static final int INT_VMS_MAX_POWER_BIT       = 10;       /* 최대 VMS 전원 비트 */
+	public static final int INT_VMS_STATUE_DUMMY        = 4;           /* dummy */
+
+	public static final int INT_VMS_MAX_DATETIME        = 14;       /* YYYYMMDDHHMMSS */
+	public static final int INT_VMS_MAX_OPER_ID         = 20;
+
+	public static final int INT_VMS_MAX_STATE           = 80;       /* 최대 VMS 시설물 상태정보 */
+	public static final int INT_VMS_MAX_PARAM           = 100;      /* 최대 VMS 파라미터 */
+	public static final int INT_VMS_MAX_PREP            = 93;       /* 최대 VMS 폼 갯수 정보 */
+	public static final int INT_VMS_MAX_FORM            = 40;       /* 최대 VMS 폼 */
+	public static final int INT_VMS_MAX_OBJECT          = 64;       /* 최대 VMS 오브젝트 */
+	public static final int INT_VMS_MAX_STRING_BUF      = 64;       /* 최대 VMS 문자열 데이터 버퍼 */
+	public static final int INT_VMS_MAX_FORM_DOWNLOAD   = 100;      /* 최대 VMS 제공정보 저장 (256개 까지 증가 가능) */
+	public static final int INT_VMS_MAX_MODE            = 100;      /* 최대 VMS 모드변경 갯수 */
+
+	/*******************************************************************************
+	 *  VDS
+	 *******************************************************************************/
+	public static final int INT_VDS_MAX_DATETIME        = 14;       /* YYYYMMDDHHMMSS */
+	public static final int INT_VDS_MAX_OPER_ID         = 20;
+	public static final int INT_VDS_MAX_STATE           = 200;      /* 최대 VDS 시설물 상태정보 */
+	public static final int INT_VDS_MAX_STOP_IMAGE      = 65535;    /* 정지영상 패킷 최대크기 */
+	/* VDS 정지영상 요청 응답 */
+	public static final int ERR_VDS_STOP_IMAGE_NORMAL           = 0x00;
+	public static final int ERR_VDS_STOP_IMAGE_NOT_CONNECT      = 0x01;
+	public static final int ERR_VDS_STOP_IMAGE_BUSY             = 0x02;
+	public static final int ERR_VDS_STOP_IMAGE_UNKNOWN_ID       = 0x03;
+	public static final int ERR_VDS_STOP_IMAGE_SIZE             = 0x04;
+
+	/*******************************************************************************
+	 *  DSRC
+	 *******************************************************************************/
+	public static final int INT_DSRC_MAX_DATETIME        = 14;      /* YYYYMMDDHHMMSS */
+	public static final int INT_DSRC_MAX_OPER_ID         = 20;
+	public static final int INT_DSRC_MAX_STATE           = 200;     /* 최대 DSRC 시설물 상태정보 */
+
+	/*******************************************************************************
+	 *  DSRC
+	 *******************************************************************************/
+	public static final int INT_TRAFFIC_TIME_SIZE       = 14;       /* YYYYMMDDHHMMSS */
+
+}

+ 152 - 0
src/main/java/com/its/traf/xnet/center/protocol/CENTER_COMM_MESSAGE.java

@@ -0,0 +1,152 @@
+package com.its.traf.xnet.center.protocol;
+
+import com.its.app.utils.SysUtils;
+import lombok.extern.slf4j.Slf4j;
+
+import java.net.InetSocketAddress;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+
+@Slf4j
+public class CENTER_COMM_MESSAGE {
+
+	public static int CENTER_HEADER_SIZE = 8;
+	
+	private InetSocketAddress sender;
+	
+	private byte sendId;
+	private byte recvId;
+	private byte totalFrame;
+	private byte currentFrame;
+	private byte msgSeq;		// reserved
+	private byte opCode;
+	private short length;		// 2byte unsigned short
+	
+	private byte[] body;
+
+	public CENTER_COMM_MESSAGE() {
+
+	}
+	public CENTER_COMM_MESSAGE(int recvId, int opCode, int length, byte msgSeq) {
+		this.sendId       = (byte)CENTER_COMM_DEFINE.INT_ID_MAIN_OPER;
+		this.recvId       = (byte)recvId;
+		this.totalFrame   = 1;
+		this.currentFrame = 1;
+		this.msgSeq       = msgSeq;
+		this.opCode       = (byte)opCode;
+		this.length       = (short)length;
+	}
+
+	public CENTER_COMM_MESSAGE(byte[] buffer, InetSocketAddress inetSocketAddress) {
+
+		this.sender = inetSocketAddress;
+
+		ByteBuffer byteBuffer = ByteBuffer.wrap(buffer);
+		byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
+
+		this.sendId       = byteBuffer.get();
+		this.recvId       = byteBuffer.get();
+		this.totalFrame   = byteBuffer.get();
+		this.currentFrame = byteBuffer.get();
+		this.msgSeq       = byteBuffer.get();
+		this.opCode       = byteBuffer.get();
+		short length      = byteBuffer.getShort();
+		this.length       = (short)(byteBuffer.array().length - 8);
+		if (this.length > 0) {
+			this.body = new byte[this.length];
+			byteBuffer.get(this.body);
+
+			if (length != this.length) {
+				log.error("######################################################################");
+				log.error("######################################################################");
+				log.error("######################################################################, Length Error: {}, {}, {}", length, this.length, buffer.length);
+				log.error("VMS PACKET: {}", SysUtils.byteArrayToHex(buffer));
+			}
+		}
+	}
+
+	public String getSenderIp() {
+		return this.sender.getAddress().getHostAddress();
+	}
+	public int getSenderPort() {
+		return this.sender.getPort();
+	}
+	
+	public byte getOpCode() {
+		return this.opCode;
+	}
+	public void setOpCode(byte opCode) {
+		this.opCode = opCode;
+	}
+	
+	public short getLength() {
+		return this.length;
+	}
+	public void setLength(short length) {
+		this.length = length;
+	}
+	public InetSocketAddress getSender() {
+		return sender;
+	}
+
+	public void setSender(InetSocketAddress sender) {
+		this.sender = sender;
+	}
+
+	public byte getSendId() {
+		return sendId;
+	}
+
+	public void setSendId(byte sendId) {
+		this.sendId = sendId;
+	}
+
+	public byte getRecvId() {
+		return recvId;
+	}
+
+	public void setRecvId(byte recvId) {
+		this.recvId = recvId;
+	}
+
+	public byte getTotalFrame() {
+		return totalFrame;
+	}
+
+	public void setTotalFrame(byte totalFrame) {
+		this.totalFrame = totalFrame;
+	}
+
+	public byte getCurrentFrame() {
+		return currentFrame;
+	}
+
+	public void setCurrentFrame(byte currentFrame) {
+		this.currentFrame = currentFrame;
+	}
+
+	public byte getMsgSeq() {
+		return msgSeq;
+	}
+
+	public void setMsgSeq(byte msgSeq) {
+		this.msgSeq = msgSeq;
+	}
+
+	public byte[] getBody() {
+		return this.body;
+	}
+	public void setBody(byte[] body) {
+		if (body != null && body.length != 0) {
+			this.body = new byte[body.length];
+			System.arraycopy(body, 0, this.body, 0, body.length);
+		}
+	}
+	public byte[] getMessage() {
+		return null;
+	}
+
+	public ByteBuffer getBuffer() {
+		return null;
+	}
+}

+ 61 - 0
src/main/java/com/its/traf/xnet/center/protocol/CENTER_PG_STATE_RES.java

@@ -0,0 +1,61 @@
+package com.its.traf.xnet.center.protocol;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+
+@Data
+@EqualsAndHashCode(callSuper=false)
+@ToString
+public class CENTER_PG_STATE_RES extends CENTER_COMM_MESSAGE {
+
+	public static int STATE_RES_HEAD_SIZE = 5;
+	public static byte STATE_NORMAL = 0x00;
+	public static byte STATE_ERROR = 0x01;
+
+	private byte count;
+	private byte type;
+	private byte db;
+	private byte comm;
+	private byte action;
+
+	public CENTER_PG_STATE_RES(int senderId, byte db, byte comm, byte action) {
+
+		super(senderId, CENTER_COMM_DEFINE.INT_OP_PG_STATE_RES, 0, (byte)0x00);
+
+		this.count  = 0x01;
+		this.type   = (byte)senderId;
+		this.db     = db;
+		this.comm   = comm;
+		this.action = action;
+	}
+
+	@Override
+	public ByteBuffer getBuffer() {
+		int pktSize = STATE_RES_HEAD_SIZE;
+		setLength((short)pktSize);
+
+		ByteBuffer byteBuffer = ByteBuffer.allocate(CENTER_HEADER_SIZE + getLength());
+		byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
+
+		byteBuffer.put(getSendId());
+		byteBuffer.put(getRecvId());
+		byteBuffer.put(getTotalFrame());
+		byteBuffer.put(getCurrentFrame());
+		byteBuffer.put(getMsgSeq());
+		byteBuffer.put(getOpCode());
+		byteBuffer.putShort((short)getLength());
+
+		byteBuffer.put(this.count);
+		byteBuffer.put(this.type);
+		byteBuffer.put(this.db);
+		byteBuffer.put(this.comm);
+		byteBuffer.put(this.action);
+
+		return byteBuffer;
+	}
+
+}

+ 50 - 0
src/main/java/com/its/traf/xnet/center/protocol/CENTER_TRAFFIC_CHANGE.java

@@ -0,0 +1,50 @@
+package com.its.traf.xnet.center.protocol;
+
+import com.its.app.utils.SysUtils;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.ToString;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+
+@Data
+@EqualsAndHashCode(callSuper=false)
+@ToString
+public class CENTER_TRAFFIC_CHANGE extends CENTER_COMM_MESSAGE {
+
+	private String prcsTm;
+
+	public CENTER_TRAFFIC_CHANGE(String prcsTm) {
+		super(CENTER_COMM_DEFINE.INT_ID_TRAFFIC_SERVER , CENTER_COMM_DEFINE.INT_OP_TRAFFIC_CHANGE, 0, (byte)0x00);
+		this.prcsTm  = prcsTm;
+	}
+
+	public void setSenderId(int senderId) {
+		setSendId((byte)senderId);
+	}
+
+	@Override
+	public ByteBuffer getBuffer() {
+		int pktSize = CENTER_COMM_DEFINE.INT_TRAFFIC_TIME_SIZE;
+		setLength((short)pktSize);
+
+		ByteBuffer byteBuffer = ByteBuffer.allocate(CENTER_HEADER_SIZE + getLength());
+		byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
+
+		byteBuffer.put(getSendId());
+		byteBuffer.put(getRecvId());
+		byteBuffer.put(getTotalFrame());
+		byteBuffer.put(getCurrentFrame());
+		byteBuffer.put(getMsgSeq());
+		byteBuffer.put(getOpCode());
+		byteBuffer.putShort((short)getLength());
+
+		byte[] prcsTmArr = new byte[CENTER_COMM_DEFINE.INT_TRAFFIC_TIME_SIZE];
+		SysUtils.copyStringToByteArray(prcsTmArr, prcsTmArr.length, this.prcsTm);
+		byteBuffer.put(prcsTmArr);
+
+		return byteBuffer;
+	}
+
+}

+ 162 - 0
src/main/java/com/its/traf/xnet/center/protocol/CENTER_VMS_COMM_MESSAGE.java

@@ -0,0 +1,162 @@
+package com.its.traf.xnet.center.protocol;
+
+import com.its.app.utils.SysUtils;
+import lombok.extern.slf4j.Slf4j;
+
+import java.net.InetSocketAddress;
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+
+@Slf4j
+public class CENTER_VMS_COMM_MESSAGE {
+
+	public static int CENTER_HEADER_SIZE = 8;
+
+	private InetSocketAddress sender;
+
+//	private byte sendId;
+//	private byte recvId;
+//	private byte totalFrame;
+//	private byte currentFrame;
+//	private byte reserved;		// reserved
+//	private byte opCode;
+//	private int  length;		// 4byte unsigned short
+//
+//	private byte intOpCode;
+//	private byte intMsgSeq;
+	private byte sendId;
+	private byte recvId;
+	private byte totalFrame;
+	private byte currentFrame;
+	private byte msgSeq;
+	private byte opCode;
+	private short length;		// 2byte unsigned short
+
+	private byte[] body;
+
+	public CENTER_VMS_COMM_MESSAGE() {
+	}
+	public CENTER_VMS_COMM_MESSAGE(int recvId, int opCode, int length, byte msgSeq) {
+		this.sendId       = (byte)CENTER_COMM_DEFINE.INT_ID_MAIN_OPER;
+		this.recvId       = (byte)recvId;
+		this.totalFrame   = 1;
+		this.currentFrame = 1;
+		this.length       = (short)(length+0);
+		this.opCode       = (byte)opCode;
+		this.msgSeq       = msgSeq;
+	}
+
+	public CENTER_VMS_COMM_MESSAGE(byte[] buffer, InetSocketAddress inetSocketAddress) {
+
+		this.sender = inetSocketAddress;
+
+		ByteBuffer byteBuffer = ByteBuffer.wrap(buffer);
+		byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
+
+		this.sendId       = byteBuffer.get();
+		this.recvId       = byteBuffer.get();
+		this.totalFrame   = byteBuffer.get();
+		this.currentFrame = byteBuffer.get();
+		this.msgSeq       = byteBuffer.get();
+		this.opCode       = byteBuffer.get();
+		int  length       = byteBuffer.getShort();
+		//this.length       = (short)(byteBuffer.array().length - 8);
+		if (this.length > 0) {
+			this.body = new byte[this.length];
+			byteBuffer.get(this.body);
+
+			if (length != this.length) {
+				log.error("######################################################################");
+				log.error("######################################################################");
+				log.error("######################################################################, Length Error: {}, {}, {}", length, this.length, buffer.length);
+				log.error("VMS PACKET: {}", SysUtils.byteArrayToHex(buffer));
+			}
+		}
+		this.length = this.length;
+	}
+
+	public String getSenderIp() {
+		return this.sender.getAddress().getHostAddress();
+	}
+	public int getSenderPort() {
+		return this.sender.getPort();
+	}
+	
+	public byte getOpCode() {
+		return this.opCode;
+	}
+	public void setOpCode(byte opCode) {
+		this.opCode = opCode;
+	}
+	
+	public short getLength() {
+		return this.length;
+	}
+	public void setLength(int length) {
+		this.length = (short)length;
+	}
+	public InetSocketAddress getSender() {
+		return sender;
+	}
+
+	public void setSender(InetSocketAddress sender) {
+		this.sender = sender;
+	}
+
+	public byte getSendId() {
+		return sendId;
+	}
+
+	public void setSendId(byte sendId) {
+		this.sendId = sendId;
+	}
+
+	public byte getRecvId() {
+		return recvId;
+	}
+
+	public void setRecvId(byte recvId) {
+		this.recvId = recvId;
+	}
+
+	public byte getTotalFrame() {
+		return totalFrame;
+	}
+
+	public void setTotalFrame(byte totalFrame) {
+		this.totalFrame = totalFrame;
+	}
+
+	public byte getCurrentFrame() {
+		return currentFrame;
+	}
+
+	public void setCurrentFrame(byte currentFrame) {
+		this.currentFrame = currentFrame;
+	}
+
+	public byte getMsgSeq() {
+		return msgSeq;
+	}
+
+	public void setMsgSeq(byte msgSeq) {
+		this.msgSeq = msgSeq;
+	}
+
+	public byte[] getBody() {
+		return this.body;
+	}
+	public void setBody(byte[] body) {
+		if (body != null && body.length != 0) {
+			this.body = new byte[body.length];
+			System.arraycopy(body, 0, this.body, 0, body.length);
+		}
+	}
+	public byte[] getMessage() {
+		return null;
+	}
+
+	public ByteBuffer getBuffer() {
+		return null;
+	}
+}

+ 64 - 0
src/main/java/com/its/traf/xnet/center/protocol/CENTER_VMS_REQ_COMMON.java

@@ -0,0 +1,64 @@
+package com.its.traf.xnet.center.protocol;
+
+import com.its.app.utils.SysUtils;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+
+@Data
+@EqualsAndHashCode(callSuper=false)
+public class CENTER_VMS_REQ_COMMON extends CENTER_VMS_COMM_MESSAGE {
+
+	private String cmdTime;
+	private String operId;
+	private Long vmsCtlrNmbr;
+	private Byte cmd;
+
+	public CENTER_VMS_REQ_COMMON(int opCode, int msgSeq, int length, Long vmsCtlrNmbr, String operId, Byte cmd) {
+		super(CENTER_COMM_DEFINE.INT_ID_VMS_SERVER, opCode, length, (byte)msgSeq);
+		this.cmdTime = SysUtils.getSysTime();
+		this.operId = operId;
+		this.vmsCtlrNmbr = vmsCtlrNmbr;
+		this.cmd = cmd;
+	}
+
+	@Override
+	public ByteBuffer getBuffer() {
+		int pktSize = CENTER_COMM_DEFINE.INT_VMS_MAX_DATETIME + CENTER_COMM_DEFINE.INT_VMS_MAX_OPER_ID + 4;
+		if (null != this.cmd) {
+			pktSize++;
+		}
+
+		setLength(pktSize);
+		ByteBuffer byteBuffer = ByteBuffer.allocate(CENTER_HEADER_SIZE + getLength());
+		byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
+
+		byteBuffer.put(getSendId());
+		byteBuffer.put(getRecvId());
+		byteBuffer.put(getTotalFrame());
+		byteBuffer.put(getCurrentFrame());
+		byteBuffer.put(getMsgSeq());
+		byteBuffer.put(getOpCode());
+		byteBuffer.putShort(getLength());
+		byte[] cmdTimeArr = new byte[CENTER_COMM_DEFINE.INT_VMS_MAX_DATETIME];
+		SysUtils.copyStringToByteArray(cmdTimeArr, cmdTimeArr.length, this.cmdTime);
+		byteBuffer.put(cmdTimeArr);
+
+		byte[] operIdArr = new byte[CENTER_COMM_DEFINE.INT_VMS_MAX_OPER_ID];
+		SysUtils.copyStringToByteArray(operIdArr, operIdArr.length, this.operId);
+		byteBuffer.put(operIdArr);
+
+		//byte[] vmsIdArr = new byte[CENTER_COMM_DEFINE.INT_VMS_MAX_ID];
+		//SysUtils.copyStringToByteArray(vmsIdArr, vmsIdArr.length, String.valueOf(this.vmsCtlrNmbr));
+		byteBuffer.putInt(this.vmsCtlrNmbr.intValue());
+		if (null != this.cmd) {
+			byteBuffer.put(this.cmd);
+		}
+		return byteBuffer;
+
+	}
+
+
+}

+ 57 - 0
src/main/java/com/its/traf/xnet/center/protocol/CENTER_VMS_REQ_LUMINANCE.java

@@ -0,0 +1,57 @@
+package com.its.traf.xnet.center.protocol;
+
+
+import com.its.app.utils.SysUtils;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+
+public class CENTER_VMS_REQ_LUMINANCE extends CENTER_VMS_REQ_COMMON {
+
+	byte brghMode;
+	byte brghCurrStep;
+	byte brghWeekStep;
+	byte brghNghtStep;
+
+	public CENTER_VMS_REQ_LUMINANCE(Long id, String userId, byte brghMode, byte brghCurrStep, byte brghWeekStep, byte brghNghtStep) {
+		super(CENTER_COMM_DEFINE.INT_OP_VMS_LUMINANCE_CTL, 0x30, 0, id, userId, null);
+		this.brghMode = brghMode;
+		this.brghCurrStep = brghCurrStep;
+		this.brghWeekStep = brghWeekStep;
+		this.brghNghtStep = brghNghtStep;
+	}
+
+	@Override
+	public ByteBuffer getBuffer() {
+		int pktSize = CENTER_COMM_DEFINE.INT_VMS_MAX_DATETIME + CENTER_COMM_DEFINE.INT_VMS_MAX_OPER_ID + 4 + 1 + 1 + 1 + 1;
+
+		setLength(pktSize);
+		ByteBuffer byteBuffer = ByteBuffer.allocate(CENTER_HEADER_SIZE + getLength());
+		byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
+
+		byteBuffer.put(getSendId());
+		byteBuffer.put(getRecvId());
+		byteBuffer.put(getTotalFrame());
+		byteBuffer.put(getCurrentFrame());
+		byteBuffer.put(getMsgSeq());
+		byteBuffer.put(getOpCode());
+		byteBuffer.putShort(getLength());
+		byte[] cmdTimeArr = new byte[CENTER_COMM_DEFINE.INT_VMS_MAX_DATETIME];
+		SysUtils.copyStringToByteArray(cmdTimeArr, cmdTimeArr.length, getCmdTime());
+		byteBuffer.put(cmdTimeArr);
+
+		byte[] operIdArr = new byte[CENTER_COMM_DEFINE.INT_VMS_MAX_OPER_ID];
+		SysUtils.copyStringToByteArray(operIdArr, operIdArr.length, getOperId());
+		byteBuffer.put(operIdArr);
+
+		//byte[] vmsIdArr = new byte[CENTER_COMM_DEFINE.INT_VMS_MAX_ID];
+		//SysUtils.copyStringToByteArray(vmsIdArr, vmsIdArr.length, String.valueOf(this.vmsCtlrNmbr));
+		byteBuffer.putInt(getVmsCtlrNmbr().intValue());
+
+		byteBuffer.put(this.brghMode);
+		byteBuffer.put(this.brghCurrStep);
+		byteBuffer.put(this.brghWeekStep);
+		byteBuffer.put(this.brghNghtStep);
+		return byteBuffer;
+	}
+}

+ 39 - 0
src/main/java/com/its/traf/xnet/center/protocol/CENTER_VMS_REQ_NOTIFY.java

@@ -0,0 +1,39 @@
+package com.its.traf.xnet.center.protocol;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+
+@Data
+@EqualsAndHashCode(callSuper=false)
+public class CENTER_VMS_REQ_NOTIFY extends CENTER_VMS_COMM_MESSAGE {
+
+	public CENTER_VMS_REQ_NOTIFY(int opCode) {
+		super(CENTER_COMM_DEFINE.INT_ID_VMS_SERVER, opCode, 0, (byte)0x00);
+	}
+
+	@Override
+	public ByteBuffer getBuffer() {
+		int pktSize = 2;
+
+		setLength(pktSize);
+
+		ByteBuffer byteBuffer = ByteBuffer.allocate(CENTER_HEADER_SIZE + getLength());
+		byteBuffer.order(ByteOrder.LITTLE_ENDIAN);
+
+		byteBuffer.put(getSendId());
+		byteBuffer.put(getRecvId());
+		byteBuffer.put(getTotalFrame());
+		byteBuffer.put(getCurrentFrame());
+		byteBuffer.put(getMsgSeq());
+		byteBuffer.put(getOpCode());
+		byteBuffer.putShort(getLength());
+
+		return byteBuffer;
+
+	}
+
+
+}

+ 8 - 0
src/main/java/com/its/traf/xnet/center/protocol/CENTER_VMS_REQ_POWER.java

@@ -0,0 +1,8 @@
+package com.its.traf.xnet.center.protocol;
+
+public class CENTER_VMS_REQ_POWER extends CENTER_VMS_REQ_COMMON {
+
+	public CENTER_VMS_REQ_POWER(Long id, String userId, Byte onOff) {
+		super(CENTER_COMM_DEFINE.INT_OP_VMS_POWER_CTL, 0x10, 0, id, userId, onOff);
+	}
+}

+ 12 - 0
src/main/java/com/its/traf/xnet/center/protocol/CENTER_VMS_REQ_RESET.java

@@ -0,0 +1,12 @@
+package com.its.traf.xnet.center.protocol;
+
+import lombok.extern.slf4j.Slf4j;
+
+@Slf4j
+public class CENTER_VMS_REQ_RESET extends CENTER_VMS_REQ_COMMON {
+
+	public CENTER_VMS_REQ_RESET(Long id, String userId, byte value) {
+		super(CENTER_COMM_DEFINE.INT_OP_VMS_RESET, 0x20, 0, id, userId, value);
+		log.error("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX: {}", value);
+	}
+}

+ 1 - 1
src/main/java/com/its/traf/xnettcp/center/protocol/CenterProtocol.java → src/main/java/com/its/traf/xnet/center/protocol/CenterProtocol.java

@@ -1,4 +1,4 @@
-package com.its.traf.xnettcp.center.protocol;
+package com.its.traf.xnet.center.protocol;
 
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;

+ 1 - 1
src/main/java/com/its/traf/xnettcp/center/protocol/CenterReqFrameHead.java → src/main/java/com/its/traf/xnet/center/protocol/CenterReqFrameHead.java

@@ -1,4 +1,4 @@
-package com.its.traf.xnettcp.center.protocol;
+package com.its.traf.xnet.center.protocol;
 
 import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;

+ 1 - 1
src/main/java/com/its/traf/xnettcp/center/protocol/CenterReqFramePacket.java → src/main/java/com/its/traf/xnet/center/protocol/CenterReqFramePacket.java

@@ -1,4 +1,4 @@
-package com.its.traf.xnettcp.center.protocol;
+package com.its.traf.xnet.center.protocol;
 
 import lombok.Getter;
 import lombok.extern.slf4j.Slf4j;

+ 1 - 1
src/main/java/com/its/traf/xnettcp/center/protocol/CenterResProtocol.java → src/main/java/com/its/traf/xnet/center/protocol/CenterResProtocol.java

@@ -1,4 +1,4 @@
-package com.its.traf.xnettcp.center.protocol;
+package com.its.traf.xnet.center.protocol;
 
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;

+ 5 - 5
src/main/java/com/its/traf/xnettcp/center/CenterTcpServerService.java → src/main/java/com/its/traf/xnet/center/tcp/CenterCommTcpServer.java

@@ -1,11 +1,11 @@
-package com.its.traf.xnettcp.center;
+package com.its.traf.xnet.center.tcp;
 
 import com.its.app.utils.NettyUtils;
 import com.its.app.utils.OS;
 import com.its.traf.config.ApplicationConfig;
-import com.its.traf.xnettcp.center.codec.CenterTcpServerEncoder;
-import com.its.traf.xnettcp.center.handler.CenterTcpServerInboundHandler;
-import com.its.traf.xnettcp.center.initializer.CenterTcpServerInitializer;
+import com.its.traf.xnet.center.tcp.codec.CenterTcpServerEncoder;
+import com.its.traf.xnet.center.tcp.handler.CenterTcpServerInboundHandler;
+import com.its.traf.xnet.center.tcp.initializer.CenterTcpServerInitializer;
 import io.netty.bootstrap.ServerBootstrap;
 import io.netty.channel.ChannelFuture;
 import io.netty.channel.ChannelHandler;
@@ -19,7 +19,7 @@ import org.springframework.stereotype.Service;
 @Slf4j
 @RequiredArgsConstructor
 @Service
-public class CenterTcpServerService {
+public class CenterCommTcpServer {
 
     private final ApplicationConfig config;
     private final CenterTcpServerInboundHandler centerTcpServerInboundHandler;

+ 5 - 5
src/main/java/com/its/traf/xnettcp/center/codec/CenterTcpServerDecoder.java → src/main/java/com/its/traf/xnet/center/tcp/codec/CenterTcpServerDecoder.java

@@ -1,10 +1,10 @@
-package com.its.traf.xnettcp.center.codec;
+package com.its.traf.xnet.center.tcp.codec;
 
 import com.its.app.utils.NettyUtils;
-import com.its.traf.xnettcp.center.handler.CenterTcpServerIdleStateHandler;
-import com.its.traf.xnettcp.center.protocol.CenterProtocol;
-import com.its.traf.xnettcp.center.protocol.CenterReqFrameHead;
-import com.its.traf.xnettcp.center.protocol.CenterReqFramePacket;
+import com.its.traf.xnet.center.tcp.handler.CenterTcpServerIdleStateHandler;
+import com.its.traf.xnet.center.protocol.CenterProtocol;
+import com.its.traf.xnet.center.protocol.CenterReqFrameHead;
+import com.its.traf.xnet.center.protocol.CenterReqFramePacket;
 import io.netty.buffer.ByteBuf;
 import io.netty.channel.Channel;
 import io.netty.channel.ChannelHandlerContext;

+ 2 - 2
src/main/java/com/its/traf/xnettcp/center/codec/CenterTcpServerEncoder.java → src/main/java/com/its/traf/xnet/center/tcp/codec/CenterTcpServerEncoder.java

@@ -1,7 +1,7 @@
-package com.its.traf.xnettcp.center.codec;
+package com.its.traf.xnet.center.tcp.codec;
 
 import com.its.app.utils.NettyUtils;
-import com.its.traf.xnettcp.center.handler.CenterTcpServerIdleStateHandler;
+import com.its.traf.xnet.center.tcp.handler.CenterTcpServerIdleStateHandler;
 import io.netty.buffer.ByteBuf;
 import io.netty.channel.Channel;
 import io.netty.channel.ChannelHandler;

+ 1 - 1
src/main/java/com/its/traf/xnettcp/center/handler/CenterTcpServerIdleStateHandler.java → src/main/java/com/its/traf/xnet/center/tcp/handler/CenterTcpServerIdleStateHandler.java

@@ -1,4 +1,4 @@
-package com.its.traf.xnettcp.center.handler;
+package com.its.traf.xnet.center.tcp.handler;
 
 import com.its.app.utils.NettyUtils;
 import io.netty.channel.Channel;

+ 2 - 2
src/main/java/com/its/traf/xnettcp/center/handler/CenterTcpServerInboundHandler.java → src/main/java/com/its/traf/xnet/center/tcp/handler/CenterTcpServerInboundHandler.java

@@ -1,7 +1,7 @@
-package com.its.traf.xnettcp.center.handler;
+package com.its.traf.xnet.center.tcp.handler;
 
 import com.its.app.utils.NettyUtils;
-import com.its.traf.xnettcp.center.protocol.CenterReqFramePacket;
+import com.its.traf.xnet.center.protocol.CenterReqFramePacket;
 import io.netty.channel.ChannelHandler;
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.channel.ChannelInboundHandlerAdapter;

+ 1 - 1
src/main/java/com/its/traf/xnettcp/center/handler/CenterTcpServerOutboundHandler.java → src/main/java/com/its/traf/xnet/center/tcp/handler/CenterTcpServerOutboundHandler.java

@@ -1,4 +1,4 @@
-package com.its.traf.xnettcp.center.handler;
+package com.its.traf.xnet.center.tcp.handler;
 
 import io.netty.channel.*;
 import org.springframework.stereotype.Component;

+ 5 - 5
src/main/java/com/its/traf/xnettcp/center/initializer/CenterTcpServerInitializer.java → src/main/java/com/its/traf/xnet/center/tcp/initializer/CenterTcpServerInitializer.java

@@ -1,9 +1,9 @@
-package com.its.traf.xnettcp.center.initializer;
+package com.its.traf.xnet.center.tcp.initializer;
 
-import com.its.traf.xnettcp.center.codec.CenterTcpServerDecoder;
-import com.its.traf.xnettcp.center.codec.CenterTcpServerEncoder;
-import com.its.traf.xnettcp.center.handler.CenterTcpServerIdleStateHandler;
-import com.its.traf.xnettcp.center.handler.CenterTcpServerInboundHandler;
+import com.its.traf.xnet.center.tcp.codec.CenterTcpServerDecoder;
+import com.its.traf.xnet.center.tcp.codec.CenterTcpServerEncoder;
+import com.its.traf.xnet.center.tcp.handler.CenterTcpServerIdleStateHandler;
+import com.its.traf.xnet.center.tcp.handler.CenterTcpServerInboundHandler;
 import io.netty.channel.Channel;
 import io.netty.channel.ChannelInitializer;
 import io.netty.channel.ChannelPipeline;

+ 87 - 0
src/main/java/com/its/traf/xnet/center/udp/CenterCommUdpServer.java

@@ -0,0 +1,87 @@
+package com.its.traf.xnet.center.udp;
+
+import com.its.traf.config.ApplicationConfig;
+import com.its.traf.xnet.center.udp.codec.CenterCommServerDecoder;
+import com.its.traf.xnet.center.udp.handler.CenterCommServerPacketHandler;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.*;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioDatagramChannel;
+import lombok.RequiredArgsConstructor;
+import lombok.ToString;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+
+@Slf4j
+@ToString
+@RequiredArgsConstructor
+@Component
+public class CenterCommUdpServer {
+
+    private final ApplicationConfig config;
+
+    private EventLoopGroup nioEventLoopGroup;
+    private Bootstrap bootstrap;
+    private boolean isThreadRunning = false;
+
+    public void run() {
+        log.info("UdpServerCenterComm.run: Start.");
+        log.info("{}", this.config);
+
+        this.nioEventLoopGroup = new NioEventLoopGroup();
+        this.bootstrap = new Bootstrap();
+        this.bootstrap.channel(NioDatagramChannel.class);
+        this.bootstrap.group(this.nioEventLoopGroup);
+        this.bootstrap.option(ChannelOption.SO_BROADCAST, false);
+        this.bootstrap.option(ChannelOption.SO_REUSEADDR, true);
+        this.bootstrap.option(ChannelOption.RCVBUF_ALLOCATOR, new FixedRecvByteBufAllocator(8192));
+        this.bootstrap.option(ChannelOption.SO_RCVBUF, 8192);
+        this.bootstrap.option(ChannelOption.SO_SNDBUF, 8192);
+        this.bootstrap.handler(new ChannelInitializer<Channel>() {
+            @Override
+            protected void initChannel(Channel ch) {
+                //ch.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
+                ch.pipeline().addLast("centerCommServerDecoder", new CenterCommServerDecoder());
+                ch.pipeline().addLast("centerCommServerPacketHandler", new CenterCommServerPacketHandler());
+            }
+        });
+
+        log.info("===============================================================");
+        log.info("=  UDP Center Communication Server Start.......................");
+        log.info("=  bindAddress: {}", this.config.getBindingAddr());
+        log.info("=     bindPort: {}", this.config.getListenPort());
+        log.info("===============================================================");
+
+        try {
+            if (this.config.getBindingAddr().equals("0.0.0.0")) {
+                if (isThreadRunning) {
+                    this.bootstrap.bind(this.config.getListenPort()).sync().channel().closeFuture().await();
+                }
+                else {
+                    this.bootstrap.bind(this.config.getListenPort());
+                }
+            }
+            else {
+                if (isThreadRunning) {
+                    this.bootstrap.bind(this.config.getBindingAddr(), config.getListenPort()).sync().channel().closeFuture().await();
+                }
+                else {
+                    this.bootstrap.bind(this.config.getBindingAddr(), config.getListenPort());
+                }
+            }
+        }
+        catch (InterruptedException e) {
+            log.error("UdpServerCenterComm.run: Bind Exception");
+            if (!isThreadRunning) {
+                this.nioEventLoopGroup.shutdownGracefully();
+            }
+        }
+        finally {
+            if (isThreadRunning) {
+                this.nioEventLoopGroup.shutdownGracefully();
+            }
+        }
+        log.info("UdpServerCenterComm.run: ..End. {}", toString());
+    }
+
+}

+ 83 - 0
src/main/java/com/its/traf/xnet/center/udp/codec/CenterCommClientEncoder.java

@@ -0,0 +1,83 @@
+package com.its.traf.xnet.center.udp.codec;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.Unpooled;
+import io.netty.channel.Channel;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.socket.DatagramPacket;
+import io.netty.handler.codec.MessageToMessageEncoder;
+import lombok.extern.slf4j.Slf4j;
+
+import java.net.InetSocketAddress;
+import java.nio.ByteBuffer;
+import java.util.List;
+
+@Slf4j
+public class CenterCommClientEncoder extends MessageToMessageEncoder<Object> {
+
+	private String remoteIpAddr;
+	private int remotePort;
+
+	public CenterCommClientEncoder(String hostIp, int hostPort) {
+		this.remoteIpAddr = hostIp;
+		this.remotePort = hostPort;
+	}
+
+	@Override
+	protected void encode(ChannelHandlerContext ctx, Object msg, List<Object> out) {
+
+		Channel channel = ctx.channel();
+		if (!channel.isOpen()) {
+			log.error("SEND UDP: Channel Closed.");
+		}
+		if (!channel.isActive()) {
+			log.error("SEND UDP: Channel InActive.");
+			channel.flush();
+			return;
+		}
+
+		if (!(msg instanceof ByteBuffer)) {
+			log.error("SEND UDP: Encoding Data source Unknown Type.");
+			return;
+		}
+
+		int sendBytes = ((ByteBuffer) msg).array().length;
+		if (this.remoteIpAddr == null) {
+			log.info("SEND UDP: [ALL], {} Bytes.", sendBytes);
+		}
+		else {
+			log.info("SEND UDP: [{}:{}], {} Bytes.", this.remoteIpAddr, this.remotePort, sendBytes);
+		}
+
+		//log.info("SEND UDP, DUMP: {}", SysUtils.byteArrayToHex(((ByteBuffer) msg).array()));
+
+		ByteBuf byteBuf = Unpooled.buffer(sendBytes);
+		byteBuf.writeBytes(((ByteBuffer) msg).array());
+		InetSocketAddress addr = new InetSocketAddress(this.remoteIpAddr, this.remotePort);
+		DatagramPacket packet = new DatagramPacket(byteBuf, addr);
+		out.add(packet);
+
+//		// 브로드 캐스팅(모든 운영단말로 전송) 및 개별 메시지 응답
+//		UnitSystService unitSystService = (UnitSystService) AppUtils.getBean(UnitSystService.class);
+//		ConcurrentHashMap<String, TbUnitSystDto> unitSystMap = unitSystService.getUnitSystMap();
+//		for (Map.Entry<String, TbUnitSystDto> e : unitSystMap.entrySet()) {
+//			if (this.remoteIpAddr == null || this.remoteIpAddr.equals(e.getValue().getSYST_IP_1())) {
+//				try {
+//					ByteBuf byteBuf = Unpooled.buffer(sendBytes);
+//					byteBuf.writeBytes(((ByteBuffer) msg).array());
+//					InetSocketAddress addr = new InetSocketAddress(e.getValue().getSYST_IP_1(), e.getValue().getPRGM_PORT());
+//					DatagramPacket packet = new DatagramPacket(byteBuf, addr);
+//					out.add(packet);
+//					if (this.remoteIpAddr == null) {
+//						log.debug("SEND: [{}] [{}:{}], {} Bytes. OK....", e.getValue().getSYST_ID(), e.getValue().getSYST_IP_1(), e.getValue().getPRGM_PORT(), sendBytes);
+//					}
+//					else {
+//						log.info("SEND: [{}] [{}:{}], {} Bytes. OK....", e.getValue().getSYST_ID(), e.getValue().getSYST_IP_1(), e.getValue().getPRGM_PORT(), sendBytes);
+//					}
+//				} catch (Exception e2) {
+//					log.error("SEND: [{}] [{}:{}], {} Bytes. Failed. Exception: {}", e.getValue().getSYST_ID(), e.getValue().getSYST_IP_1(), e.getValue().getPRGM_PORT(), sendBytes, e2.toString());
+//				}
+//			}
+//		}
+	}
+}

+ 53 - 0
src/main/java/com/its/traf/xnet/center/udp/codec/CenterCommServerDecoder.java

@@ -0,0 +1,53 @@
+package com.its.traf.xnet.center.udp.codec;
+
+import com.its.traf.xnet.center.protocol.CENTER_COMM_MESSAGE;
+import io.netty.buffer.ByteBuf;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.socket.DatagramPacket;
+import io.netty.handler.codec.MessageToMessageDecoder;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.List;
+
+@Slf4j
+public class CenterCommServerDecoder extends MessageToMessageDecoder<DatagramPacket> {
+
+	@Override
+	protected void decode(ChannelHandlerContext ctx, DatagramPacket packet, List<Object> out) {
+
+		ByteBuf buf = packet.content();
+
+		int recvBytes = buf.readableBytes();
+		log.info("RECV UDP: [{}], {} Bytes.", packet.sender().getAddress().getHostAddress(), recvBytes);
+
+		if (buf.readableBytes() < CENTER_COMM_MESSAGE.CENTER_HEADER_SIZE) {
+			log.error("RECV UDP: UDP Message header length error: {}/{} Bytes.", recvBytes, CENTER_COMM_MESSAGE.CENTER_HEADER_SIZE);
+			return;
+		}
+
+		byte[] buffer = new byte[recvBytes];
+		buf.getBytes(buf.readerIndex(), buffer);
+		//log.error("RECV UDP, DUMP: {}, {}", packet.sender().getAddress().getHostAddress(), SysUtils.byteArrayToHex(buffer));
+//01 00 01 01 00 01 00 00 00 00
+//27 07 01 01 00 FF 00 00 04 D1   0C 00 29 31 30 30
+//27 07 01 01 00 FF 00 00 00 10   0B 00 32 30 32 32 30 33 32 34 31 35 34 38 31 30
+
+//#define INT_OP_VMS_STATE_REQ      0x01          /* VMS 통신 서버, VMS 시설물 상태정보 요청 */
+//#define INT_OP_VMS_STATE_RES      0x02          /* VMS 통신 서버, VMS 시설물 상태정보 전송 */
+//#define INT_OP_VMS_POWER_CTL      0x03          /* VMS 통신 서버, VMS 전광판 On/Off 제어 */
+//#define INT_OP_VMS_LUMINANCE_CTL  0x04          /* VMS 통신 서버, VMS 휘도 제어 */
+		//typedef struct int_head
+		//{
+		//	BYTE  SendId;							/* 송신 시스템 ID */
+		//	BYTE  RecvId;							/* 수신 시스템 ID */
+		//	BYTE  TotalFrame;						/* 전체 프레임 갯수 */
+		//	BYTE  CurrentFrame;						/* 현재 프레임 번호 */
+		//	BYTE  Reserved;							/* Reserved */
+		//	BYTE  OPCode;							/* 명령어 */
+		//	DWORD Length;							/* 데이터의 길이 */
+		//} INT_HEAD;
+
+		CENTER_COMM_MESSAGE msg = new CENTER_COMM_MESSAGE(buffer, packet.sender());
+		out.add(msg);
+	}
+}

+ 53 - 0
src/main/java/com/its/traf/xnet/center/udp/handler/CenterCommServerPacketHandler.java

@@ -0,0 +1,53 @@
+package com.its.traf.xnet.center.udp.handler;
+
+import com.its.app.utils.NettyUtils;
+import com.its.traf.config.AppUtils;
+import com.its.traf.xnet.center.protocol.CENTER_COMM_MESSAGE;
+import com.its.traf.xnet.center.udp.thread.CenterCommServerReceiver;
+import io.netty.channel.ChannelHandlerContext;
+import io.netty.channel.SimpleChannelInboundHandler;
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.IOException;
+import java.net.InetSocketAddress;
+
+@Slf4j
+public class CenterCommServerPacketHandler extends SimpleChannelInboundHandler<Object> {
+
+	@Override
+	protected void channelRead0(ChannelHandlerContext ctx, Object msg) {
+
+		if (!(msg instanceof CENTER_COMM_MESSAGE)) {
+			log.error("CenterCommServerPacketHandler: Received Data Unknown Type: {}", NettyUtils.getTcpAddress(ctx.channel()));
+			return;
+		}
+
+		// UDP 통신은 스레드 풀로 처리한다.
+		CenterCommServerReceiver handler = (CenterCommServerReceiver) AppUtils.getBean(CenterCommServerReceiver.class);
+		if (handler != null) {
+			handler.run((CENTER_COMM_MESSAGE) msg);
+		}
+		else {
+			log.error("CenterCommServerReceiver bean loading failed....");
+		}
+	}
+
+	public void channelReadComplete(ChannelHandlerContext ctx) {
+		ctx.channel().flush();
+	}
+
+	public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws RuntimeException {
+		InetSocketAddress remoteAddress = (InetSocketAddress)ctx.channel().remoteAddress();
+        String ip = remoteAddress.getAddress().getHostAddress();
+        log.error("CenterCommServerPacketHandler::exceptionCaught: {}, {}", ip, cause.getMessage());
+	    cause.printStackTrace();
+		try {
+			super.exceptionCaught(ctx, cause);
+		} catch (IOException ie) {
+			// FOR KISA Secure Coding pass
+			log.error("exceptionCaught: IOException, permitAll");
+		} catch (Exception e) {
+			throw new RuntimeException(e);
+		}
+	}
+}

+ 9 - 0
src/main/java/com/its/traf/xnet/center/udp/service/CenterCommResponseService.java

@@ -0,0 +1,9 @@
+package com.its.traf.xnet.center.udp.service;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class CenterCommResponseService {
+}

+ 60 - 0
src/main/java/com/its/traf/xnet/center/udp/service/TrafficNotifyDataSender.java

@@ -0,0 +1,60 @@
+package com.its.traf.xnet.center.udp.service;
+
+import com.its.traf.dto.its.TbUnitSystDto;
+import com.its.traf.service.its.UnitSystService;
+import com.its.traf.xnet.center.protocol.CENTER_COMM_DEFINE;
+import com.its.traf.xnet.center.protocol.CENTER_TRAFFIC_CHANGE;
+import com.its.traf.xnet.center.udp.thread.CenterCommClientSender;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+@Slf4j
+@RequiredArgsConstructor
+@Service
+public class TrafficNotifyDataSender {
+
+    private final UnitSystService unitSystService;
+    private final CenterCommClientSender centerCommClientSender;
+
+    /**
+     * 가공정보 완료 메시지를 클라이언트로 전송한다.
+     *
+     * @param prcsTm
+     */
+    public void notifyTrafficPrcsCompleted(String prcsTm) {
+        log.info("notifyTrafficPrcsCompleted: {}", prcsTm);
+        int sendUnit = 0;
+        CENTER_TRAFFIC_CHANGE commMsg = new CENTER_TRAFFIC_CHANGE(prcsTm);
+
+        ConcurrentHashMap<String, TbUnitSystDto> unitSystMap = this.unitSystService.getUnitSystMap();
+		for (Map.Entry<String, TbUnitSystDto> e : unitSystMap.entrySet()) {
+            TbUnitSystDto unit = e.getValue();
+            if ("Y".equals(unit.getDEL_YN()) || unit.getSYST_IP_1() == null || unit.getPRGM_PORT() == 0) {
+                continue;
+            }
+
+            boolean sendData = false;
+            if ("UOT".equals(unit.getSYST_TYPE())) {
+                commMsg.setSenderId(CENTER_COMM_DEFINE.INT_ID_MAIN_OPER);
+                sendData = true;
+            }
+            if ("VMS".equals(unit.getSYST_TYPE())) {
+                commMsg.setSenderId(CENTER_COMM_DEFINE.INT_ID_VMS_OPER);
+                sendData = true;
+            }
+            if (!sendData) {
+                continue;
+            }
+            log.info("notifyTrafficPrcsCompleted: request {}:{}", unit.getSYST_IP_1(), unit.getPRGM_PORT());
+            this.centerCommClientSender.run(unit.getSYST_IP_1(), unit.getPRGM_PORT(), commMsg.getBuffer());
+            sendUnit++;
+		}
+
+        log.info("notifyTrafficPrcsCompleted: {}, Send {} Unit.", prcsTm, sendUnit);
+    }
+
+}

+ 53 - 0
src/main/java/com/its/traf/xnet/center/udp/thread/CenterCommClientSender.java

@@ -0,0 +1,53 @@
+package com.its.traf.xnet.center.udp.thread;
+
+import com.its.traf.xnet.center.udp.codec.CenterCommClientEncoder;
+import io.netty.bootstrap.Bootstrap;
+import io.netty.channel.*;
+import io.netty.channel.nio.NioEventLoopGroup;
+import io.netty.channel.socket.nio.NioDatagramChannel;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import java.nio.ByteBuffer;
+
+@Slf4j
+@Service
+public class CenterCommClientSender {
+
+    @Async("centerCommExecutor")
+    public void run(String ip, int port, ByteBuffer sendBuffer) {
+        if (sendBuffer == null) {
+            log.error("CenterCommClientSender.run: Notify Data NULL");
+            return;
+        }
+
+        EventLoopGroup nioEventLoopGroup = new NioEventLoopGroup();
+        try {
+            Bootstrap bootstrap = new Bootstrap();
+            bootstrap.channel(NioDatagramChannel.class);
+            bootstrap.group(nioEventLoopGroup);
+            bootstrap.option(ChannelOption.SO_BROADCAST, false);
+            bootstrap.handler(new ChannelInitializer<Channel>() {
+                @Override
+                protected void initChannel(Channel channel)
+                {
+                    channel.pipeline().addLast(new CenterCommClientEncoder(ip, port));
+                }
+            });
+
+            Channel channel = bootstrap.bind(0).sync().channel();
+            ChannelFuture f = channel.writeAndFlush(sendBuffer).sync();
+            if (!f.isDone() || !f.isSuccess()) {
+                log.error("CenterCommClientSender.run: Send Failed. isDone: {}, isSuccess: {}", f.isDone(), f.isSuccess());
+            }
+        }
+        catch(InterruptedException e) {
+            log.error("CenterCommClientSender.run: InterruptedException");
+        }
+        finally {
+            nioEventLoopGroup.shutdownGracefully();
+            log.info("CenterCommClientSender.run: {} Bytes, ip: {}, port: {}", sendBuffer.array().length, ip, port);
+        }
+    }
+}

+ 34 - 0
src/main/java/com/its/traf/xnet/center/udp/thread/CenterCommServerReceiver.java

@@ -0,0 +1,34 @@
+package com.its.traf.xnet.center.udp.thread;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.its.traf.xnet.center.protocol.CENTER_COMM_MESSAGE;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Async;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.PostConstruct;
+
+@Slf4j
+@Service
+public class CenterCommServerReceiver {
+
+    private ObjectMapper mapper;
+
+    @PostConstruct
+    private void init() {
+        this.mapper = new ObjectMapper();
+    }
+
+    @Async("centerCommExecutor")
+    public void run(CENTER_COMM_MESSAGE data) {
+        if (data == null) {
+            log.error("CenterCommServerReceiver: RECV Data Packet NULL");
+            return;
+        }
+
+        String reqIpAddr = data.getSenderIp();
+        int reqPort = 4603;
+        log.info("CenterCommServerReceiver: {}:{}", reqIpAddr, reqPort);
+    }
+
+}

+ 4 - 3
src/main/resources/logback-spring.xml

@@ -48,14 +48,14 @@
         </discriminator>
         <sift>
             <appender name="FILE-${id}" class="ch.qos.logback.core.rolling.RollingFileAppender">
-                <file>${LOG_PATH}packet/${id}.log</file>
+                <file>${LOG_PATH}${id}.log</file>
                 <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
                     <charset>${LOG_CHARSET}</charset>
                     <Pattern>${LOG_PATTERN_PACKET}</Pattern>
                 </encoder>
 
                 <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
-                    <FileNamePattern>${LOG_BACKUP_PATH}packet/${id}.${LOG_FILE_NAME_PATTERN}</FileNamePattern>
+                    <FileNamePattern>${LOG_BACKUP_PATH}${id}.${LOG_FILE_NAME_PATTERN}</FileNamePattern>
                     <maxFileSize>${MAX_FILESIZE}</maxFileSize>
                     <maxHistory>${MAX_HISTORY}</maxHistory>
                 </rollingPolicy>
@@ -100,7 +100,8 @@
         <appender-ref ref="FILE_ERROR"/>
     </root>
 
-    <logger name="${APP_CLASS_PATH}.xnettcp" level="DEBUG" additivity="false">
+    <logger name="${APP_CLASS_PATH}.xnet" level="DEBUG" additivity="false">
+        <appender-ref ref="CONSOLE"/>
         <appender-ref ref="FILE_PACKET"/>
         <appender-ref ref="FILE_ERROR"/>
     </logger>

+ 6 - 6
src/main/resources/mybatis/mapper/its/collect/LinkRawDataMOCT01.xml

@@ -16,9 +16,9 @@
                  INNER JOIN (SELECT TO_CHAR(LINK_ID) AS LINKID
                              FROM TB_LINK) B
                             ON A.LINKID    = B.LINKID
-                                AND A.LINKLEVEL = 1
-                                AND A.REGDATE  >= SYSDATE - 9/1440
-                                AND A.SPEED     > 2
+                            AND A.LINKLEVEL = 1
+                            AND A.REGDATE  >= SYSDATE - 9/1440
+                            AND A.SPEED     > 2
         GROUP BY A.LINKID
         ]]>
     </select>
@@ -36,9 +36,9 @@
                  INNER JOIN (SELECT TO_CHAR(LINK_ID) AS LINKID
                              FROM TB_LINK) B
                             ON A.LINKID    = B.LINKID
-                                AND A.LINKLEVEL = 1
-                                AND A.REGDATE  >= SYSDATE - 9/1440
-                                AND A.SPEED     > 2
+                            AND A.LINKLEVEL = 1
+                            AND A.REGDATE  >= SYSDATE - 9/1440
+                            AND A.SPEED     > 2
         GROUP BY A.LINKID
         ]]>
     </select>