Преглед на файлове

Merge branch 'dimming_version' of HomeNetServer/kakao into master

alalssg преди 5 години
родител
ревизия
250ef117b4

+ 5 - 2
src/main/java/com/icontrols/kakao/common/SERVERINFO.java

@@ -41,8 +41,11 @@ public class SERVERINFO {
 	public static final String KAKAO_HEADER_CLIENT_ID = "MPAHXKWELS";
 	public static final String KAKAO_HEADER_CLIENT_SECRET = "SHDPEOWJSKDZALQXLDNS";
 	
-	public static final String KAKAO_EVENT_CLIENT_ID = "pkevk1F4cKHzs7rN4MHe25wYnUm3kRvh";
-	public static final String KAKAO_EVENT_CLIENT_SECRET = "pF2UrvbhkAqbptG4SyrsUU5pTB1DWtqm";
+//	public static final String KAKAO_EVENT_CLIENT_ID = "pkevk1F4cKHzs7rN4MHe25wYnUm3kRvh";			// beta 앱에서 테스트시
+//	public static final String KAKAO_EVENT_CLIENT_SECRET = "pF2UrvbhkAqbptG4SyrsUU5pTB1DWtqm";		// beta 앱에서 테스트시
+	
+	public static final String KAKAO_EVENT_CLIENT_ID = "zaXpi9VRVobQPFXuSDQzZ3EEdDrgPSUW";			// 릴리즈 앱에서 테스트시
+	public static final String KAKAO_EVENT_CLIENT_SECRET = "Hy5qg31KTSpHnTt8rfZsvFHmAoYTdByp";		// 릴리즈 앱에서 테스트시
 	
 	public final static String HEADER_AUTH = "Authorization";
 	

+ 26 - 2
src/main/java/com/icontrols/kakao/common/THINGS_INFO.java

@@ -24,7 +24,7 @@ public final class THINGS_INFO {
 		LIGHT_DIMMER("dimming","{\"capabilities\" : [ { \"name\" : \"Power\" }, { \"name\" : \"Brightness\" } ]}"),
 		COLOR_LIGHT("colorLight", "{\"capabilities\" : [ { \"name\" : \"Power\" }, { \"name\" : \"ColorMode\"}, { \"name\" : \"ColorTemperature\"} ]}"),
 		COLOR_LIGHT_DIMMER("colorDimming", "{\"capabilities\" : [ { \"name\" : \"Power\" }, { \"name\" : \"Brightness\" }, { \"name\" : \"ColorMode\"}, { \"name\" : \"ColorTemperature\", \"attributes\" : { \"colorTemperature\": { \"min\":3000, \"max\":5700 } } } ]}"),
-		TEMPER("temper", "{\"capabilities\" : [ { \"name\" : \"Power\" }, { \"name\" : \"Temperature\" }, { \"name\" : \"TemperatureSetpoint\" } ]}"),
+		TEMPER("temper", "{\"capabilities\" : [ { \"name\" : \"Power\" }, { \"name\" : \"Temperature\" }, { \"name\" : \"TemperatureSetpoint\" , \"attributes\" : { \"targetSetpoint\": { \"min\":20, \"max\":30 } } } ]}"),
 		VENTIL("ventil","{\"capabilities\" : [ { \"name\" : \"Power\" }, { \"name\" : \"AirFlow\" } ]}"),
 		GAS("gas","{\"capabilities\" : [ { \"name\" : \"Lock\" } ] }"),
 		ELEVATOR("elevator", "{\"capabilities\" : [ { \"name\" : \"ElevatorCall\" } ] }"),
@@ -58,18 +58,33 @@ public final class THINGS_INFO {
 		LIGHT03						("light03",						"Light",			"방2조명"),
 		LIGHT04						("light04",						"Light",			"방3조명"),
 		LIGHT05						("light05",						"Light",			"방4조명"),
+		LIGHT06						("light06",						"Light",			"방5조명"),
+		LIGHT07						("light07",						"Light",			"방6조명"),
+		LIGHT08						("light08",						"Light",			"방7조명"),
+		LIGHT09						("light09",						"Light",			"방8조명"),
+		LIGHT10						("light10",						"Light",			"방9조명"),
 		DIMMER_LIVINGLIGHT			("dimmer_livinglight", 			"LightDimmer", 		"거실조명"),
 		DIMMER_LIGHT01				("dimmer_light01",				"LightDimmer",		"주방조명"),
 		DIMMER_LIGHT02				("dimmer_light02",				"LightDimmer",		"방1조명"),
 		DIMMER_LIGHT03				("dimmer_light03",				"LightDimmer",		"방2조명"),
 		DIMMER_LIGHT04				("dimmer_light04",				"LightDimmer",		"방3조명"),
 		DIMMER_LIGHT05				("dimmer_light05",				"LightDimmer",		"방4조명"),
+		DIMMER_LIGHT06				("dimmer_light06",				"LightDimmer",		"방5조명"),
+		DIMMER_LIGHT07				("dimmer_light07",				"LightDimmer",		"방6조명"),
+		DIMMER_LIGHT08				("dimmer_light08",				"LightDimmer",		"방7조명"),
+		DIMMER_LIGHT09				("dimmer_light09",				"LightDimmer",		"방8조명"),
+		DIMMER_LIGHT10				("dimmer_light10",				"LightDimmer",		"방9조명"),
 		COLOR_DIMMER_LIVINGLIGHT	("colorDimmer_livinglight", 	"ColorLightDimmer",	"거실조명"),
 		COLOR_DIMMER_LIGHT01		("colorDimmer_light01",			"ColorLightDimmer",	"주방조명"),
 		COLOR_DIMMER_LIGHT02		("colorDimmer_light02",			"ColorLightDimmer",	"방1조명"),
 		COLOR_DIMMER_LIGHT03		("colorDimmer_light03",			"ColorLightDimmer",	"방2조명"),
 		COLOR_DIMMER_LIGHT04		("colorDimmer_light04",			"ColorLightDimmer",	"방3조명"),
 		COLOR_DIMMER_LIGHT05		("colorDimmer_light05",			"ColorLightDimmer",	"방4조명"),
+		COLOR_DIMMER_LIGHT06		("colorDimmer_light06",			"ColorLightDimmer",	"방5조명"),
+		COLOR_DIMMER_LIGHT07		("colorDimmer_light07",			"ColorLightDimmer",	"방6조명"),
+		COLOR_DIMMER_LIGHT08		("colorDimmer_light08",			"ColorLightDimmer",	"방7조명"),
+		COLOR_DIMMER_LIGHT09		("colorDimmer_light09",			"ColorLightDimmer",	"방8조명"),
+		COLOR_DIMMER_LIGHT10		("colorDimmer_light10",			"ColorLightDimmer",	"방9조명"),
 		VENTIL						("ventil",						"AirVentilator",	"환기"),
 		GAS							("gas",							"GasValve",			"가스밸브"),
 		ELEVATOR					("elevator",					"ElevatorCaller",	"엘리베이터"),
@@ -78,12 +93,21 @@ public final class THINGS_INFO {
 		TEMPER3						("temper_3",					"FloorHeater",		"방2난방"),
 		TEMPER4						("temper_4",					"FloorHeater",		"방3난방"),
 		TEMPER5						("temper_5",					"FloorHeater",		"방4난방"),
+		TEMPER6						("temper_6",					"FloorHeater",		"방5난방"),
+		TEMPER7						("temper_7",					"FloorHeater",		"방6난방"),
+		TEMPER8						("temper_8",					"FloorHeater",		"방7난방"),
+		TEMPER9						("temper_9",					"FloorHeater",		"방8난방"),
+		TEMPER10					("temper_10",					"FloorHeater",		"방9난방"),
 		ELECTRIC01					("electric01",					"PowerOutlet",		"거실콘센트"),
 		ELECTRIC02					("electric02",					"PowerOutlet",		"주방콘센트"),
 		ELECTRIC03					("electric03",					"PowerOutlet",		"방1콘센트"),
 		ELECTRIC04					("electric04",					"PowerOutlet",		"방2콘센트"),
 		ELECTRIC05					("electric05",					"PowerOutlet",		"방3콘센트"),
-		ELECTRIC06					("electric06",					"PowerOutlet",		"방4콘센트")
+		ELECTRIC06					("electric06",					"PowerOutlet",		"방4콘센트"),
+		ELECTRIC07					("electric07",					"PowerOutlet",		"방5콘센트"),
+		ELECTRIC08					("electric08",					"PowerOutlet",		"방6콘센트"),
+		ELECTRIC09					("electric09",					"PowerOutlet",		"방7콘센트"),
+		ELECTRIC10					("electric10",					"PowerOutlet",		"방8콘센트")
 		;
 		
 		

+ 1 - 1
src/main/java/com/icontrols/kakao/common/utils/JWTUtils2.java

@@ -41,7 +41,7 @@ public class JWTUtils2 {
 		try {
 			secretKey = ACCESS_TOEKN_SECRET_KEY;
 			
-			logger.info(token);
+//			logger.info(token);
 			Decoder decoder = Base64.getDecoder();
 			// 시그니처가 맞는지 확인
 			String enPayload = token.split("\\.")[1];

+ 2 - 2
src/main/java/com/icontrols/kakao/controller/AccessTokenController.java

@@ -39,7 +39,7 @@ public class AccessTokenController {
 		String type = (String) params.get("type");
 		Map<String, Object> body = (HashMap<String, Object>) params.get("body");
 		
-		logger.info("[accessToken] - id [" + params.get("id") + "] - type [" + type + "] - body [" + body.toString() + "]");
+		logger.info("[accessToken]-[" + reqId + "]- id [" + params.get("id") + "] - type [" + type + "] - body [" + body.toString() + "]");
 		
 		switch(type) {
 		case "CREATE":
@@ -58,7 +58,7 @@ public class AccessTokenController {
 		
 		retMap.put("id", reqId);
 		retMap.put("type", type);
-		logger.info("[accessToken] RESULT - " + retMap.toString());
+		logger.info("[accessToken]-[" + reqId + "]-  RESULT - " + retMap.toString());
 		return retMap;
 	}
 }

+ 1 - 1
src/main/java/com/icontrols/kakao/service/impl/AccessTokenServiceImpl.java

@@ -51,7 +51,7 @@ public class AccessTokenServiceImpl implements AccessTokenService {
 		
 		// 1.2 삭제된 토큰이면 UNLINK 토큰
 		UserInfo userInfo = uList.get(0);
-		logger.info("[validate] - userInfo - " + userInfo.toString());
+		logger.info("[validate] - " + userInfo.toString());
 		if(userInfo.getDeleteFlag().equals("Y")) {
 			logger.error("[ERROR] - 연동 해지 토큰 - " + accessToken);
 			return KAKAO_RESULT.FAIL_UNLINKEXTENSION_SERVICE;

+ 1 - 1
src/main/java/com/icontrols/kakao/service/impl/KakaoExtensionServiceImpl.java

@@ -168,7 +168,7 @@ public class KakaoExtensionServiceImpl implements KakaoExtensionService {
 		
 		Map<String, Object> retMap = new HashMap<String, Object>();
 		
-		logger.info("[QUERYSTATE] - " + endpointIds);
+		logger.debug("[QUERYSTATE] - " + endpointIds);
 		
 		try {
 			if(endpointIds == null) {

+ 4 - 4
src/main/java/com/icontrols/kakao/socket/utils/SSLClient.java

@@ -54,14 +54,14 @@ public class SSLClient {
 	public SSLClient(String host, int port) {
 		// 1. Param Check
 		if (host == null) {
-			logger.info("[SSLClient] Param 'host' is null !!!");
+			logger.error("[SSLClient] Param 'host' is null !!!");
 			return;
 		}
 
 		// 2. IP Convert & Check
 		byte[] retIP = IPConverting(host);
 		if (retIP == null) {
-			logger.info("[SSLClient] IPConverting Error !!!");
+			logger.error("[SSLClient] IPConverting Error !!!");
 			return;
 		}
 		ServerIP = retIP;
@@ -207,7 +207,7 @@ public class SSLClient {
 		} catch (ConnectException ce) {
 			// TODO Auto-generated catch block
 			recvMsg = "ConnectionException";
-			logger.info("[sendToWallpad] - Exception !!! ~~~");
+			logger.error("[sendToWallpad] - Exception !!! ~~~");
 
 			try {
 				Thread.sleep(2000);
@@ -221,7 +221,7 @@ public class SSLClient {
 			// TODO Auto-generated catch block
 
 			recvMsg = "SocketTimeoutException";
-			logger.info("connection TIME OUT!!!");
+			logger.error("connection TIME OUT!!!");
 
 			try {
 				Thread.sleep(100);

+ 68 - 0
src/main/java/com/icontrols/kakao/socket/wallpad/ImapMultiSocketSSLServer.java

@@ -0,0 +1,68 @@
+package com.icontrols.kakao.socket.wallpad;
+
+import java.io.IOException;
+import java.net.ServerSocket;
+import java.net.Socket;
+
+import javax.net.ServerSocketFactory;
+import javax.net.ssl.SSLServerSocket;
+import javax.net.ssl.SSLServerSocketFactory;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.icontrols.kakao.common.SERVERINFO;
+import com.icontrols.kakao.common.utils.CommonUtil;
+
+public class ImapMultiSocketSSLServer extends Thread{
+	private static final Logger logger = LoggerFactory.getLogger(ImapMultiSocketSSLServer.class);
+	ServerSocket svr;
+	
+	private SSLServerSocket sslSvr;
+	boolean receiveSocketRun = true;
+	
+	private int serverPort;
+	
+	public ImapMultiSocketSSLServer(){
+		try {
+			serverPort = SERVERINFO.WalladReceivePort;
+			ServerSocketFactory ssf = SSLServerSocketFactory.getDefault();
+			ServerSocket sck = ssf.createServerSocket(serverPort);
+			logger.info("**********************************************************");
+			logger.info("SSL Event Server Socket Start!");
+			logger.info("...");
+			logger.info("이벤트 수신 IP" + sck.getLocalSocketAddress());
+			logger.info("...");
+			logger.info("이벤트 수신 포트 : " + sck.getLocalPort());
+			logger.info("...");
+			logger.info("Timeout : " + sck.getSoTimeout());
+			logger.info("**********************************************************");
+			
+			while(true) {
+				logger.info("Waiting New Event Message ... " );
+				
+				Socket connectedCLientSocket = sck.accept();
+				
+				logger.info("Connect Client IP : " + connectedCLientSocket.getInetAddress() + " || Client Port : " + connectedCLientSocket.getLocalPort());
+				
+				new ThreadServerHandler(connectedCLientSocket, CommonUtil.getUpdateNoticeNewDanjiServer()).start();
+			}
+		}catch(Exception e) {
+			logger.error("SSL server Socket 생성 실패" );
+			logger.error(e.getMessage());
+			e.printStackTrace();
+		}
+	}
+	
+	public void run() {
+		while(receiveSocketRun) {
+			try {
+				Socket socket = sslSvr.accept();
+			}catch(Exception e) {
+				logger.error("SSL Server Socket Start Error");
+				logger.error(e.getMessage());
+				e.printStackTrace();
+			}
+		}
+	}
+}

+ 3 - 5
src/main/java/com/icontrols/kakao/socket/wallpad/KakaoEventHandler.java

@@ -81,7 +81,7 @@ public class KakaoEventHandler {
 				params.put(KEY_INFO.HTTP_KEY_AUTHORIZATION, userInfo.getKakaoAccessToken());
 			}
 			
-			logger.info("["+userInfo.getKakaoAccessToken()+"] - 유효한 토큰");
+			logger.debug("["+userInfo.getKakaoAccessToken()+"] - 유효한 토큰");
 			
 			// 이벤트 전송.
 			Map<String, Object> sendResult = sendStatusResult(userInfo, params);
@@ -214,7 +214,7 @@ public class KakaoEventHandler {
 				int errorCode = Integer.parseInt((String)errMap.get(KEY_INFO.ERROR_KEY_CODE));
 				String message = (String)errMap.get(KEY_INFO.ERROR_KEY_MESSAGE);
 				
-				logger.info("[KAKAO - ERROR] - [ CODE ] - " + errorCode + " || [message] - " + message );
+				logger.error("[KAKAO - ERROR] - [ CODE ] - " + errorCode + " || [message] - " + message );
 				
 				retMap.put("result", errorCode);
 				retMap.put("message", message);
@@ -292,9 +292,7 @@ public class KakaoEventHandler {
 				
 				repo.save(userInfo);
 				
-				logger.info("****************************************************");
-				logger.info("토큰 리프레시 성공");
-				logger.info("****************************************************");
+				logger.info("토큰 리프레시 성공 - " + userInfo.getDonghoInfo());
 				return userInfo;
 			}
 		}catch(Exception e) {

+ 5 - 3
src/main/java/com/icontrols/kakao/socket/wallpad/KakaoMsgHandler.java

@@ -74,10 +74,12 @@ public class KakaoMsgHandler {
 			
 			logger.info(sb.toString());
 			
-			SSLClient.sendToWallpad(targetIP, sb.toString());
+			String rcvMsg = SSLClient.sendToWallpad(targetIP, sb.toString());
 			
-			retMap.put("result", ERROR_INFO.CODE.SUCCESS.getContents());
-			retMap.put("resultCode", ERROR_INFO.CODE.SUCCESS.getmIdx());
+			if(rcvMsg.trim().length() == 0) {
+				retMap.put("result", ERROR_INFO.CODE.SUCCESS.getContents());
+				retMap.put("resultCode", ERROR_INFO.CODE.SUCCESS.getmIdx());
+			}
 		}catch(Exception e) {
 			retMap.put("result", ERROR_INFO.CODE.FAIL_999.getContents());
 			retMap.put("resultCode", ERROR_INFO.CODE.FAIL_999.getmIdx());

+ 2 - 2
src/main/java/com/icontrols/kakao/socket/wallpad/RecieveiMapMultiSocket.java

@@ -40,7 +40,7 @@ public class RecieveiMapMultiSocket {
 
 			while (true) {
 				logger.debug("클라이언트가 접속해 오기를 기다리고 있습니다....");
-				logger.info("[Waiting....");
+				logger.debug("[Waiting....");
 
 				Socket connectedClientSocket = server.accept();
 
@@ -49,7 +49,7 @@ public class RecieveiMapMultiSocket {
 				String ip 		= ia.getHostAddress(); 						// 접속된 원격 Client IP
 
 				connectCount += 1; 											// 접속자수 카운트 증가
-				logger.info(" Connect Count : "+ connectCount + " , 접속-Local Port: " + port + " , Client IP: " + ip);
+				logger.debug(" Connect Count : "+ connectCount + " , 접속-Local Port: " + port + " , Client IP: " + ip);
 
 				if (connectCount > 2000000000) connectCount = 0;			// [질문]- 아직 초기화 하는 이유를 모르겠슴돠.. int의 MAX_VALUE에 근접해서 인가요? ? ? ? ? .황.
 																			// [답변]- 

+ 6 - 1
src/main/java/com/icontrols/kakao/socket/wallpad/ThreadServerHandler.java

@@ -117,6 +117,7 @@ public class ThreadServerHandler extends Thread {
 					logger.error("[Exception] iMAPSvrProc.run() ===== 2 =====");
 					connectedClientSocket.close();
 					logger.error("message : " + e);
+					e.printStackTrace();
 					return;
 				}finally {
 					strRcvMSG = sbRcvMSG.toString();
@@ -247,6 +248,10 @@ public class ThreadServerHandler extends Thread {
 						
 						return;
 					}
+					
+					//batchlight는 현재 카카오에서는 지원하지 않음
+					if(endpointId.contains("batchlight")) return;
+					
 					KakaoEventHandler kakaoEventHandler = (KakaoEventHandler)BeanUtils.getBean("kakaoEventHandler");
 					
 					List<CompletableFuture<Map<String, Object>>> fList = new ArrayList<>();
@@ -308,7 +313,7 @@ public class ThreadServerHandler extends Thread {
 							String message = (String)eventResult.get("message");
 							
 							if(code == KAKAO_RESULT.SUCCESS) {
-								logger.info("[EVENT SUCCESS] - " + message);
+								logger.debug("[EVENT SUCCESS] - " + message);
 							} else {
 								logger.error("[EVENT ERROR] - [CODE-" + code + "]" + message);
 								

+ 23 - 2
src/main/resources/logback-spring.xml

@@ -19,10 +19,31 @@
             <pattern>[KAKAO] %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{35} - %msg%n</pattern>
         </encoder>
     </appender>
-                                                                                                                           
-    <logger name="com.icontrols.kakao" level="INFO"></logger>
+    
+    <logger name="com.icontrols.kakao" level="info"></logger>
 
     <root level="INFO">
         <appender-ref ref="dailyRollingFileAppender" />
     </root>
+    
+    <appender name="dailyRollingFileAppenderERROR"
+              class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <append>true</append>
+        <prudent>true</prudent>
+
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>log/ERROR_LogFile_%d{yyyy-MM-dd}.log</fileNamePattern>
+            <maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
+            <level>ERROR</level>
+        </filter>
+
+        <encoder>
+            <pattern>[KAKAO] %d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{35} - %msg%n</pattern>
+        </encoder>
+    </appender>            
+    <root level="ERROR">
+        <appender-ref ref="dailyRollingFileAppenderERROR" />
+    </root>
 </configuration>