| 
					
				 | 
			
			
				@@ -3,7 +3,12 @@ package com.its.pis.websocket; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fasterxml.jackson.core.type.TypeReference; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.fasterxml.jackson.databind.ObjectMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.its.app.utils.ItsUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.pis.entity.TbPisInfr; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.pis.global.AppRepository; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import com.its.pis.websocket.C2F.message.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.pis.websocket.common.PisSubscribeIdentifier; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.pis.websocket.common.PisSubscribeRequest; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import com.its.pis.websocket.common.PisSubscribeResponseAccept; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import lombok.extern.slf4j.Slf4j; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.apache.commons.io.FileUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import org.springframework.stereotype.Controller; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -15,6 +20,7 @@ import org.springframework.web.socket.handler.TextWebSocketHandler; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.io.File; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.Base64; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 import java.util.Map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 @Slf4j 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -41,39 +47,99 @@ public class ItsWebSocketHandler extends TextWebSocketHandler { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     public void afterConnectionEstablished(WebSocketSession session) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         // 클라이언트가 연결되었을때 실행 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        log.info("afterConnectionEstablished: {}", session.getHandshakeHeaders().entrySet()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String ipAddr = session.getRemoteAddress().getHostString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String token = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (Map.Entry<String, List<String>> l : session.getHandshakeHeaders().entrySet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if ("sec-websocket-protocol".equals(l.getKey())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                token = l.getValue().get(0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (token == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("afterConnectionEstablished: {}, token not found, session will be closed", ipAddr); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            session.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        log.info("afterConnectionEstablished: {}, {}, {}, {}", session.getBinaryMessageSizeLimit(), session.getTextMessageSizeLimit(), session.getRemoteAddress().getHostString(), session.getAcceptedProtocol()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        log.info("afterConnectionEstablished: " + session.getRemoteAddress() + ",  URI: " + session.getUri() + ", UUID: " + session.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        session.setBinaryMessageSizeLimit(1*1024*1024); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        session.setTextMessageSizeLimit(1*1024*1024); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        super.afterConnectionEstablished(session); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        log.info("afterConnectionEstablished: ipAddr={}, token={}", ipAddr, token); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (Map.Entry<String, TbPisInfr> e : AppRepository.getInstance().getPisNmbrMap().entrySet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            TbPisInfr pis = e.getValue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (token.equals(pis.getPIS_TOKEN())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ItsWebSocketSession vo = new ItsWebSocketSession(pis, this, session); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                pis.channelOpen(vo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                ItsWebSocketSessionManager.getInstance().addSession(session, vo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                session.setBinaryMessageSizeLimit(1*1024*1024); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                session.setTextMessageSizeLimit(1*1024*1024); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                super.afterConnectionEstablished(session); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.info("afterConnectionEstablished: connection accept, {}, {}", pis.getPIS_ID(), pis.getPIS_NM()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ItsWebSocketSession vo = new ItsWebSocketSession(this, session); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ItsWebSocketSessionManager.getInstance().addSession(session, vo); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        log.error("afterConnectionEstablished: ipAddr={}, token={}, not found token, session will be closed", ipAddr, token); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        session.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     //클라이언트가 웹소켓 서버로 메시지를 전송했을 때 실행 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        log.info("handleTextMessage: {}, {}, {}, {}", session.getBinaryMessageSizeLimit(), session.getTextMessageSizeLimit(), session.getRemoteAddress().getHostString(), session.getAcceptedProtocol()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        log.info("handleTextMessage: " + session.getRemoteAddress() + ",  Uri[" + session.getUri() + "], UUID[" + session.getId() + "]");//, message[" + message.getPayload() + "]"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        /*List<String> requests = ItsUtils.split(message.getPayload(), ":"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (requests.size() != 2) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            log.error("Request data parsing error: {}", requests); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        String payloadMessage = message.getPayload(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (payloadMessage == null || payloadMessage.trim().isEmpty()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("handleTextMessage: Payload data is empty"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        log.info("handleTextMessage: Payload, RX] {}", payloadMessage); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        ItsWebSocketSession sessionClient = ItsWebSocketSessionManager.getInstance().getSession(session); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (sessionClient == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("handleTextMessage: Request session not found, session will be closed {}", session); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             session.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //C2FMessage<C2FMessagePayload> c2fMessage = this.mapper.readValue(message.getPayload(), C2FMessage.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        C2FMessage<C2FMessagePayload> c2fMessage = this.mapper.readValue(message.getPayload(), new TypeReference<C2FMessage<C2FMessagePayload>>(){}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        log.error("{}", c2fMessage); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        C2FMessage<C2FMessagePayload> c2fMessage = this.mapper.readValue(payloadMessage, new TypeReference<C2FMessage<C2FMessagePayload>>(){}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (c2fMessage.getCommand() == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("handleTextMessage: C2FMessage, {}", c2fMessage); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("handleTextMessage: command data not found, session will be closed {}", session); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            session.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if ("subscribe".equals(c2fMessage.getCommand())) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.info("handleTextMessage: RX] subscribe"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PisSubscribeRequest subscribe = this.mapper.readValue(payloadMessage, PisSubscribeRequest.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            //log.info("handleTextMessage: RX] {}", subscribe); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.info("RX] {}", this.mapper.writeValueAsString(subscribe)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            TbPisInfr pis = sessionClient.getObj(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            if (pis == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.error("handleTextMessage: PIS object not found, session will be closed {}", session); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                session.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pis.channelLogin(pis.getSession()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            PisSubscribeResponseAccept response = PisSubscribeResponseAccept.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .identifier(PisSubscribeIdentifier.builder() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                            .channel("ParkingLotChannel").build()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .essntl_info("Not Setting Info") 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                    .type("confirm_subscription").build(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            String strMessage = this.mapper.writeValueAsString(response); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            sessionClient.sendMessage(response.getType(), new TextMessage(strMessage)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.info("TX] {}", strMessage); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             String eventName = c2fMessage.getData().getPayload().getEvent_name(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             if ("prk_plce_sttus_info".equals(eventName)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                C2FMessage<PrkPlceSttusInfo> sttusInfo = this.mapper.readValue(message.getPayload(), new TypeReference<C2FMessage<PrkPlceSttusInfo>>(){}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                log.error("{}", this.mapper.writeValueAsString(sttusInfo)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                C2FMessage<PrkPlceSttusInfo> sttusInfo = this.mapper.readValue(payloadMessage, new TypeReference<C2FMessage<PrkPlceSttusInfo>>(){}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                C2FMessage<PrkPlceSttusInfo> sttusTemp = sttusInfo; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                sttusTemp.getData().getPayload().getPrk_place_image().setPrk_plce_image_data("base64 image data string"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.info("handleTextMessage: RX] prk_plce_sttus_info"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.info("RX] {}", this.mapper.writeValueAsString(sttusTemp)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                 if (sttusInfo.getData().getPayload().getPrk_place_image() != null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     int imageType = sttusInfo.getData().getPayload().getPrk_place_image().getPrk_plce_image_type(); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -97,36 +163,28 @@ public class ItsWebSocketHandler extends TextWebSocketHandler { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 //                String encodedString = Base64.getEncoder().encodeToString(fileContent); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } else if ("prk_plce_opr_info".equals(eventName)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                C2FMessage<PrkPlceOprInfo> oprInfo = this.mapper.readValue(message.getPayload(), new TypeReference<C2FMessage<PrkPlceOprInfo>>(){}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //PrkPlceOprInfo oprInfo = (PrkPlceOprInfo)c2fMessage.getData().getPayload(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                log.error("{}", this.mapper.writeValueAsString(oprInfo)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            } else if ("prk_plce_rl_time_info".equals(eventName)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                C2FMessage<PrkPlceRlTimeResponseInfo> rlTimeInfo = this.mapper.readValue(message.getPayload(), new TypeReference<C2FMessage<PrkPlceRlTimeResponseInfo>>(){}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //PrkPlceRlTimeInfo rlTimeInfo = (PrkPlceRlTimeInfo)c2fMessage.getData().getPayload(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                log.error("{}", this.mapper.writeValueAsString(rlTimeInfo)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                C2FMessage<PrkPlceOprInfo> oprInfo = this.mapper.readValue(payloadMessage, new TypeReference<C2FMessage<PrkPlceOprInfo>>(){}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.info("handleTextMessage: RX] prk_plce_opr_info"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.info("RX] {}", this.mapper.writeValueAsString(oprInfo)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            } else if ("prk_plce_rl_time_info".equals(eventName) || "prk_plce_rl_time_info_cycle".equals(eventName)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                C2FMessage<PrkPlceRlTimeResponseInfo> rlTimeInfo = this.mapper.readValue(payloadMessage, new TypeReference<C2FMessage<PrkPlceRlTimeResponseInfo>>(){}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.info("handleTextMessage: RX] prk_plce_rl_time_info"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.info("RX] {}", this.mapper.writeValueAsString(rlTimeInfo)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } else if ("prk_plce_reservation_response_info".equals(eventName)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                C2FMessage<PrkPlceReservationResponseInfo> reservationInfo = this.mapper.readValue(message.getPayload(), new TypeReference<C2FMessage<PrkPlceReservationResponseInfo>>(){}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //PrkPlceReservationResponseInfo reservationInfo = (PrkPlceReservationResponseInfo)c2fMessage.getData().getPayload(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                log.error("{}", this.mapper.writeValueAsString(reservationInfo)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                C2FMessage<PrkPlceReservationResponseInfo> reservationInfo = this.mapper.readValue(payloadMessage, new TypeReference<C2FMessage<PrkPlceReservationResponseInfo>>(){}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.info("handleTextMessage: RX] prk_plce_reservation_response_info"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.info("RX] {}", this.mapper.writeValueAsString(reservationInfo)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } else if ("prk_plce_vhcl_location_response_info".equals(eventName)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                C2FMessage<PrkPlceVhclLocationResponseInfo> locationInfo = this.mapper.readValue(message.getPayload(), new TypeReference<C2FMessage<PrkPlceVhclLocationResponseInfo>>(){}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                //PrkPlceVhclLocationResponseInfo locationInfo = (PrkPlceVhclLocationResponseInfo)c2fMessage.getData().getPayload(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                log.error("{}", this.mapper.writeValueAsString(locationInfo)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                C2FMessage<PrkPlceVhclLocationResponseInfo> locationInfo = this.mapper.readValue(payloadMessage, new TypeReference<C2FMessage<PrkPlceVhclLocationResponseInfo>>(){}); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.info("handleTextMessage: RX] prk_plce_vhcl_location_response_info"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.info("RX] {}", this.mapper.writeValueAsString(locationInfo)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                log.error("Unknown event name: {}", eventName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-                log.error("Payload: {}", message.getPayload()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.error("handleTextMessage: RX] Unknown event name, {}", eventName); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+                log.error("RX] Payload, {}", payloadMessage); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } catch(NullPointerException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            log.error("Payload data null. {}", message.getPayload()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        ItsWebSocketSession sessionClient = ItsWebSocketSessionManager.getInstance().getSession(session); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        if (sessionClient == null) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            log.error("Request session not found: {}", session); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            session.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-            return; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            log.error("handleTextMessage: RX] NullPointerException, Payload data null, {}", payloadMessage); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-        //log.info("Payload: {}", message.getPayload()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     //클라이언트 연결을 끊었을 때 실행 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -135,6 +193,18 @@ public class ItsWebSocketHandler extends TextWebSocketHandler { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         log.info("afterConnectionClosed: " + session.getRemoteAddress() + ",  URI: " + session.getUri() + ", UUID: " + session.getId()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         ItsWebSocketSessionManager.getInstance().removeSession(session); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         super.afterConnectionClosed(session, status); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        for (Map.Entry<String, TbPisInfr> e : AppRepository.getInstance().getPisNmbrMap().entrySet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            TbPisInfr pis = e.getValue(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            pis.channelClosed(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				  
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    @Override 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        log.error("handleTransportError: {}", exception.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        if (session.isOpen()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+            session.close(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+        super.handleTransportError(session, exception); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |