shjung 11 ماه پیش
والد
کامیت
ed7c30b6ea

+ 2 - 2
src/main/java/com/its/rota/server/process/dbms/DbmsDataProcess.java

@@ -93,7 +93,7 @@ public class DbmsDataProcess {
                     if (DbmsData.D_KIND_INC.equals(incLog.getInfoKind())) {
                         result += this.incidentMapper.updSndIncident(incLog);
                         incLog.setInfoKind("E1");
-                        result += this.sndLogMapper.insSndLog(incLog);
+                        result += this.sndLogMapper.insCenterSend(incLog);
                     }
                     break;
                 case DbmsData.DBMS_DATA_LOG_TRAFFIC:
@@ -101,7 +101,7 @@ public class DbmsDataProcess {
                     result = this.sndLogMapper.insSndLog(trfLog);
                     if (DbmsData.D_KIND_TRAF.equals(trfLog.getInfoKind())) {
                         trfLog.setInfoKind("R1");
-                        result += this.sndLogMapper.insSndLog(trfLog);
+                        result += this.sndLogMapper.insCenterSend(trfLog);
                     }
                     break;
                 case DbmsData.DBMS_DATA_DELETE_SND_LOG:

+ 1 - 1
src/main/java/com/its/rota/server/repository/ApplicationRepository.java

@@ -130,7 +130,7 @@ public class ApplicationRepository {
             for (TbCenter entity : lists) {
                 log.info("ApplicationRepository.loadRegionCenterInfo: {}.", entity);
                 CenterDto dto = entity.toDto();
-                if (dto.getResTime() < 5) {
+                if (dto.getResTime() < 10) {
                     dto.setResTime(10);
                 }
                 if (dto.getHeartBeat() < 30) {

+ 12 - 12
src/main/java/com/its/rota/server/scheduler/ApplicationScheduler.java

@@ -86,25 +86,25 @@ public class ApplicationScheduler {
     @Async
     @Scheduled(cron = "0 * * * * *")  // 1분 주기 작업 실행
     public void checkSendIncident() {
-        Elapsed elapsed = new Elapsed();
-        log.info("ApplicationScheduler.checkSendIncident: start.");
-        try {
-            this.itsRotaServerService.checkSendIncident();
-            log.info("ApplicationScheduler.checkSendIncident: {}", Elapsed.elapsedTimeStr(elapsed.nanoSeconds()));
-        }
-        catch(Exception e) {
-            log.error("ApplicationScheduler.checkSendIncident: Exception {}", e.getMessage());
-        }
+//        Elapsed elapsed = new Elapsed();
+//        log.info("ApplicationScheduler.checkSendIncident: start.");
+//        try {
+//            this.itsRotaServerService.checkSendIncident();
+//            log.info("ApplicationScheduler.checkSendIncident: {}", Elapsed.elapsedTimeStr(elapsed.nanoSeconds()));
+//        }
+//        catch(Exception e) {
+//            log.error("ApplicationScheduler.checkSendIncident: Exception {}", e.getMessage());
+//        }
     }
 
     @Async
     @Scheduled(cron = "0/10 * * * * *")  // 10초 주기 작업 실행
     public void checkSendTraffic() {
-        Elapsed elapsed = new Elapsed();
-        log.info("ApplicationScheduler.checkSendTraffic: start.");
+//        Elapsed elapsed = new Elapsed();
+//        log.info("ApplicationScheduler.checkSendTraffic: start.");
         try {
             int result = this.itsRotaServerService.checkSendTraffic();
-            log.info("ApplicationScheduler.checkSendTraffic: result: {}, {}", result, Elapsed.elapsedTimeStr(elapsed.nanoSeconds()));
+//            log.info("ApplicationScheduler.checkSendTraffic: result: {}, {}", result, Elapsed.elapsedTimeStr(elapsed.nanoSeconds()));
         }
         catch(Exception e) {
             log.error("ApplicationScheduler.checkSendTraffic: Exception {}", e.getMessage());

+ 0 - 33
src/main/java/com/its/rota/server/service/IncidentService.java

@@ -1,33 +0,0 @@
-package com.its.rota.server.service;
-
-import com.its.rota.server.dao.mapper.IncidentMapper;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-
-@Slf4j
-@Getter
-@Service
-@RequiredArgsConstructor
-@Transactional(rollbackFor = {Exception.class})
-public class IncidentService {
-
-    private final IncidentMapper mapper;
-
-    @PostConstruct
-    private void init() {
-        log.info("IncidentService.init: start.");
-        log.info("IncidentService.init: ..end.");
-    }
-
-    @PreDestroy
-    public void destroyService() {
-        log.error("IncidentService.destroy. system terminated.......");
-    }
-
-}

+ 0 - 33
src/main/java/com/its/rota/server/service/TrafficService.java

@@ -1,33 +0,0 @@
-package com.its.rota.server.service;
-
-import com.its.rota.server.dao.mapper.TrafficMapper;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import javax.annotation.PostConstruct;
-import javax.annotation.PreDestroy;
-
-@Slf4j
-@Getter
-@Service
-@RequiredArgsConstructor
-@Transactional(rollbackFor = {Exception.class})
-public class TrafficService {
-
-    private final TrafficMapper mapper;
-
-    @PostConstruct
-    private void init() {
-        log.info("TrafficService.init: start.");
-        log.info("TrafficService.init: ..end.");
-    }
-
-    @PreDestroy
-    public void destroyService() {
-        log.error("TrafficService.destroy. system terminated.......");
-    }
-
-}

+ 1 - 2
src/main/java/com/its/rota/server/xnet/server/ItsAsnCommServerInitializer.java

@@ -23,7 +23,6 @@ public class ItsAsnCommServerInitializer extends ChannelInitializer<Channel> {
     private final ApplicationConfig config;
     private final ApplicationRepository repo;
     private final ItsAsnServerPacketInboundHandler itsAsnServerPacketInboundHandler;
-    private final ItsAsnServerDecoder itsAsnServerDecoder;
     private final ItsAsnServerEncoder itsAsnServerEncoder;
 
     @Override
@@ -54,7 +53,7 @@ public class ItsAsnCommServerInitializer extends ChannelInitializer<Channel> {
         ChannelPipeline pipeline = channel.pipeline();
 //        pipeline.addLast(new LoggingHandler(LogLevel.INFO));
         pipeline.addLast("itsAsnIdleStateHandler", idleStateHandler);
-        pipeline.addLast("itsAsnServerDecoder", this.itsAsnServerDecoder);  // Decoding handler
+        pipeline.addLast("itsAsnServerDecoder", new ItsAsnServerDecoder());  // Decoding handler
         pipeline.addLast("itsAsnServerPacketInboundHandler", this.itsAsnServerPacketInboundHandler); // packet distribute handler add
         pipeline.addLast("itsAsnServerEncoder", this.itsAsnServerEncoder);  // Encoding handler
     }

+ 2 - 4
src/main/java/com/its/rota/server/xnet/server/ItsAsnCommServerService.java

@@ -1,10 +1,10 @@
 package com.its.rota.server.xnet.server;
 
+import com.beanit.utils.ItsAsn;
 import com.its.app.common.utils.NettyUtils;
 import com.its.app.common.utils.OS;
 import com.its.rota.server.config.ApplicationConfig;
 import com.its.rota.server.repository.ApplicationRepository;
-import com.its.rota.server.xnet.server.codec.ItsAsnServerDecoder;
 import com.its.rota.server.xnet.server.codec.ItsAsnServerEncoder;
 import com.its.rota.server.xnet.server.handler.ItsAsnServerPacketInboundHandler;
 import io.netty.bootstrap.ServerBootstrap;
@@ -23,7 +23,6 @@ public class ItsAsnCommServerService {
 
     private final ApplicationConfig config;
     private final ApplicationRepository repo;
-    private final ItsAsnServerDecoder itsAsnServerDecoder;
     private final ItsAsnServerEncoder itsAsnServerEncoder;
     private final ItsAsnServerPacketInboundHandler itsAsnServerPacketInboundHandler;
 
@@ -95,7 +94,7 @@ public class ItsAsnCommServerService {
 
         serverBootstrap.option(ChannelOption.AUTO_READ, true);
         serverBootstrap.option(ChannelOption.SO_BACKLOG, config.getBacklog());
-        serverBootstrap.option(ChannelOption.SO_RCVBUF, config.getRcvBuf());
+        serverBootstrap.option(ChannelOption.SO_RCVBUF, ItsAsn.ITS_ASN_PACKET_MAX_SIZE);//config.getRcvBuf());
         serverBootstrap.option(ChannelOption.SO_REUSEADDR, true);
         serverBootstrap.option(ChannelOption.CONNECT_TIMEOUT_MILLIS, config.getConnectTimeoutSeconds()*1000);
 
@@ -108,7 +107,6 @@ public class ItsAsnCommServerService {
                 this.config,
                 this.repo,
                 this.itsAsnServerPacketInboundHandler,
-                this.itsAsnServerDecoder,
                 this.itsAsnServerEncoder
         );
         serverBootstrap.childHandler(itsAsnCommServerInitializer);

+ 4 - 8
src/main/java/com/its/rota/server/xnet/server/codec/ItsAsnServerDecoder.java

@@ -11,13 +11,11 @@ import com.its.rota.server.dto.CenterDto;
 import com.its.rota.server.dto.RecvPacketDto;
 import com.its.rota.server.repository.ApplicationRepository;
 import io.netty.buffer.ByteBuf;
-import io.netty.channel.ChannelHandler;
 import io.netty.channel.ChannelHandlerContext;
 import io.netty.handler.codec.MessageToMessageDecoder;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.slf4j.MDC;
-import org.springframework.stereotype.Component;
 
 import java.io.ByteArrayInputStream;
 import java.io.IOException;
@@ -25,8 +23,6 @@ import java.util.List;
 
 @Slf4j
 @RequiredArgsConstructor
-@Component
-@ChannelHandler.Sharable
 public class ItsAsnServerDecoder extends MessageToMessageDecoder<ByteBuf> {
 
     @Override
@@ -72,10 +68,10 @@ public class ItsAsnServerDecoder extends MessageToMessageDecoder<ByteBuf> {
                     }
                 }
                 catch(IOException e) {
-                    log.error("RECV: [{}, {}], decode error. inBytes: {}", center.getLogKey(), center.getIpAddress(), SysUtils.byteArrayToHex(inBytes));
-                    log.error("RECV: [{}, {}], decode error. inBytes: {} Bytes., Exception {}",
-                            center.getLogKey(), center.getIpAddress(), inBytes.length, e.getMessage());
-                    isError = true;
+//                    log.error("RECV: [{}, {}], decode error. inBytes: {}", center.getLogKey(), center.getIpAddress(), SysUtils.byteArrayToHex(inBytes));
+//                    log.error("RECV: [{}, {}], decode error. inBytes: {} Bytes., Exception {}",
+//                            center.getLogKey(), center.getIpAddress(), inBytes.length, e.getMessage());
+//                    isError = true;
                     break;
                 }
 

+ 4 - 4
src/main/java/com/its/rota/server/xnet/server/codec/ItsAsnServerEncoder.java

@@ -29,7 +29,7 @@ public class ItsAsnServerEncoder extends MessageToByteEncoder<Object> {
 
 
      @Override
-    protected void encode(ChannelHandlerContext ctx, Object msg, ByteBuf byteBuf) throws Exception {
+    protected void encode(ChannelHandlerContext ctx, Object msg, ByteBuf outByteBuf) throws Exception {
         CenterDto center = ApplicationRepository.getCenterObject(ctx.channel());
         if (center == null) {
             log.error("SEND: [{}]. Not Found Channel Center Object... Oops Will be closed.", NettyUtils.getAddress(ctx.channel()));
@@ -57,12 +57,12 @@ public class ItsAsnServerEncoder extends MessageToByteEncoder<Object> {
                 dataPkt.setDatexCrcNbr(new BerOctetString(ItsAsnCrc16.getCrc16ToByteArray(c2cBuff.getArray())));  // crc
 
                 dataPkt.encode(pktBuff);
-                byteBuf.writeBytes(pktBuff.getArray());
+                outByteBuf.writeBytes(pktBuff.getArray());
                 center.getNetState().setLastSendTime();
                 log.info("SEND: [{}, {}], {} Bytes.", center.getLogKey(), center.getIpAddress(), pktBuff.getArray().length);
                 if (center.isCommLogging()) {
-                    byte[] debugBytes = new byte[byteBuf.readableBytes()];
-                    byteBuf.getBytes(byteBuf.readerIndex(), debugBytes);
+                    byte[] debugBytes = new byte[outByteBuf.readableBytes()];
+                    outByteBuf.getBytes(outByteBuf.readerIndex(), debugBytes);
                     log.info("SEND: [{}, {}], {} Bytes. {}", center.getLogKey(), center.getIpAddress(), debugBytes.length, SysUtils.byteArrayToHex(debugBytes));
                 }
             }

+ 40 - 52
src/main/java/com/its/rota/server/xnet/server/process/response/RejectResponse.java

@@ -4,72 +4,60 @@ import com.beanit.its.C2CAuthenticatedMessage;
 import com.beanit.its.PDUs;
 import com.beanit.its.Reject;
 import com.beanit.its.RejectType;
-import com.its.app.common.utils.NettyUtils;
-import com.its.rota.server.common.SpringUtils;
 import com.its.rota.server.dto.CenterDto;
-import com.its.rota.server.process.dbms.DbmsDataProcess;
-import io.netty.channel.ChannelHandlerContext;
+import com.its.rota.server.repository.ApplicationRepository;
 import lombok.extern.slf4j.Slf4j;
+import org.slf4j.MDC;
 
 @Slf4j
 public class RejectResponse implements ItsAsnResponse {
-    private CenterDto obj;
-    private ChannelHandlerContext ctx;
+    private CenterDto center;
     private C2CAuthenticatedMessage c2c;
-    private DbmsDataProcess dbmsDataProcess;
 
-    public RejectResponse(CenterDto obj, ChannelHandlerContext ctx, C2CAuthenticatedMessage c2c) {
-        this.obj = obj;
-        this.ctx = ctx;
+    public RejectResponse(CenterDto center, C2CAuthenticatedMessage c2c) {
+        this.center = center;
         this.c2c = c2c;
-        this.dbmsDataProcess = SpringUtils.getBean(DbmsDataProcess.class);
     }
 
     @Override
     public boolean response() {
-        String ipAddress = NettyUtils.getRemoteIpAddress(this.ctx.channel());
-        log.info("RejectResponse.response: {}", ipAddress);
-
-        PDUs pdus = this.c2c.getPdu();
-        Reject reject = pdus.getReject();
-        if (reject == null) {
-            log.error("RejectResponse.response: {}, reject data null", ipAddress);
-            return false;
+        boolean result = true;
+        try {
+            MDC.put("id", this.center.getLogKey());
+            log.info("RejectResponse.response: [{}, {}]. Will be closed.", this.center.getLogKey(), this.center.getIpAddress());
+            PDUs pdus = this.c2c.getPdu();
+            Reject reject = pdus.getReject();
+            if (reject == null) {
+                log.error("RejectResponse.response: [{}, {}]. reject data null", this.center.getLogKey(), this.center.getIpAddress());
+                return false;
+            }
+
+            long dataPacketNmbr = c2c.getDatexDataPacketNumber().value.longValue();
+            Long  rejectPacketNmbr = reject.getDatexRejectPacketNbr().value.longValue();
+            RejectType rejectType = reject.getDatexRejectType();
+
+            int rejectCode = 0;
+            if (rejectType.getDatexRejectLoginCd() != null) {
+                rejectCode = rejectType.getDatexRejectLoginCd().value.intValue();
+                log.error("RejectResponse.response: [{}, {}]. RejectLoginCd: dataPacketNmbr: {}, rejectPacketNmbr: {}, rejectCode: {}", this.center.getLogKey(), this.center.getIpAddress(), dataPacketNmbr, rejectPacketNmbr, rejectCode);
+            }
+            else if (rejectType.getDatexRejectSubscriptionCd() != null) {
+                rejectCode = rejectType.getDatexRejectSubscriptionCd().value.intValue();
+                log.error("RejectResponse.response: [{}, {}]. RejectSubscription: dataPacketNmbr: {}, rejectPacketNmbr: {}, rejectCode: {}", this.center.getLogKey(), this.center.getIpAddress(), dataPacketNmbr, rejectPacketNmbr, rejectCode);
+            }
+            else if (rejectType.getDatexRejectPublicationCd() != null) {
+                rejectCode = rejectType.getDatexRejectPublicationCd().value.intValue();
+                log.error("RejectResponse.response: [{}, {}]. RejectPublication: dataPacketNmbr: {}, rejectPacketNmbr: {}, rejectCode: {}", this.center.getLogKey(), this.center.getIpAddress(), dataPacketNmbr, rejectPacketNmbr, rejectCode);
+            }
+            ApplicationRepository.closeChannel(this.center, this.center.getNetState().getChannel());
         }
-
-        long dataPacketNmbr = c2c.getDatexDataPacketNumber().value.longValue();
-        Long  rejectPacketNmbr = reject.getDatexRejectPacketNbr().value.longValue();
-        RejectType rejectType = reject.getDatexRejectType();
-
-//        TbRseCtrlHs command = null;
-        int rejectCode = 0;
-        if (rejectType.getDatexRejectLoginCd() != null) {
-            rejectCode = rejectType.getDatexRejectLoginCd().value.intValue();
-            log.error("RejectResponse.response: {}. RejectLoginCd: dataPacketNmbr: {}, rejectPacketNmbr: {}, rejectCode: {}", ipAddress, dataPacketNmbr, rejectPacketNmbr, rejectCode);
-            // TODO: 클라이언트와의 연결을 종료한다.
-            //ItsAsnServerIdleStatePacketHandler.disconnectChannel(this.obj, this.ctx.channel());
+        catch (Exception e) {
+            log.error("RejectResponse.response: [{}, {}]. Packet send Exception. will be closed. {}", this.center.getLogKey(), this.center.getIpAddress(), e.getMessage());
+            result = false;
         }
-        else if (rejectType.getDatexRejectSubscriptionCd() != null) {
-            rejectCode = rejectType.getDatexRejectSubscriptionCd().value.intValue();
-            log.error("RejectResponse.response: {}. RejectSubscription: dataPacketNmbr: {}, rejectPacketNmbr: {}, rejectCode: {}", ipAddress, dataPacketNmbr, rejectPacketNmbr, rejectCode);
-//            this.obj.removeRegisteredCommands(rejectPacketNmbr, true);
-//            command = this.obj.getUserCommands(rejectPacketNmbr);
+        finally {
+            MDC.clear();
         }
-        else if (rejectType.getDatexRejectPublicationCd() != null) {
-            rejectCode = rejectType.getDatexRejectPublicationCd().value.intValue();
-            log.error("RejectResponse.response: {}. RejectPublication: dataPacketNmbr: {}, rejectPacketNmbr: {}, rejectCode: {}", ipAddress, dataPacketNmbr, rejectPacketNmbr, rejectCode);
-//            this.obj.removeRegisteredCommands(rejectPacketNmbr, true);
-//            command = this.obj.getUserCommands(rejectPacketNmbr);
-        }
-
-//        if (command != null) {
-//            log.error("RejectResponse.response: {}. Reject User Command: dataPacketNmbr: {}, rejectPacketNmbr: {}, rejectCode: {}", ipAddress, dataPacketNmbr, rejectPacketNmbr, rejectCode);
-////            this.obj.removeUserCommands(rejectPacketNmbr);
-////            // TODO: 제어명령 전송정보 전송(실패)
-////            command.setRspsType("4");  // 명령 실패(REJECT)로 설정
-////            RseCtlrMapper mapper = (RseCtlrMapper) AppUtils.getBean(RseCtlrMapper.class);
-////            mapper.updateRseCtrlHs(command);
-//        }
-        return true;
+        return result;
     }
 }

+ 4 - 18
src/main/java/com/its/rota/server/xnet/server/process/work/DataPacketWorker.java

@@ -84,8 +84,6 @@ public class DataPacketWorker extends AbstractAppWorker implements Runnable {
 
             ItsAsnResponse response = null;
             switch (cmd) {
-                case AI_Initiate:
-                    break;
                 case AI_Login:
                     response = new LoginResponse(center, c2c);
                     break;
@@ -101,24 +99,12 @@ public class DataPacketWorker extends AbstractAppWorker implements Runnable {
                 case AI_Subscription: // 클라이언트가 서버에 정보를 요청할 경우 송신하는 데이터 패킷
                     response = new SubscriptionResponse(center, c2c);
                     break;
-//                case AI_Publication :   //(0x07, "AI_Publication"),        /* 클라이언트가 요청한 정보를 제공하기 위한 데이터 패킷 - 요청에 대한 정보공개*/
-//                    response = new PublicationResponse(obj, ctx, c2c);
-//                    break;
-                case AI_Accept      :   //(0x09, "AI_Accept"),             /* 클라이언트의 요청에 대한 수용 */
+                case AI_Accept:   // 클라이언트의 요청에 대한 수용
                     response = new AcceptResponse(center, c2c);
                     break;
-//                case AI_Reject      :   //(0x0A, "AI_Reject");             /* 클라이언트의 요청에 대한 거부 */
-//                    // 운영단말 명령에 대한 거부도 발생할 수 있으므로 운영단말로 결과를 전송한다.
-//                    response = new RejectResponse(obj, ctx, c2c);
-//                    break;
-//                case AI_TransferDone:   //(0x08, "AI_TransferDone"),       /* 클라이언트가 요청한 정보를 파일형태로 제공하기 위한 데이터 패킷 */
-//                    // 처리내용 없음
-//                    response = new TransferDoneResponse(obj, ctx, c2c);
-//                    break;
-//                case AI_Null        :   //(0x00, "AI_Null"),               /* NULL */
-//                    // 처리내용 없음
-//                    response = new NullResponse(obj, ctx, c2c);
-//                    break;
+                case AI_Reject:   // 클라이언트의 요청에 대한 거부
+                    response = new RejectResponse(center, c2c);
+                    break;
                 default:
                     break;
             }