장동신 장동신 2024-11-12
카카오 알림톡, 친구톡 파일처리 로직 수정
@5205f7bbe3bab6c1a8b7efe3be45094aaad07565
src/main/java/com/munjaon/client/server/packet/KakaoMessage.java
--- src/main/java/com/munjaon/client/server/packet/KakaoMessage.java
+++ src/main/java/com/munjaon/client/server/packet/KakaoMessage.java
@@ -155,4 +155,19 @@
 
         return fileBuffer;
     }
+
+    public static ByteBuffer makeJsonHeaderForDeliver(String path, String fileName) throws UnsupportedEncodingException {
+        if (path == null || fileName == null) {
+            return null;
+        }
+        File file = new File(path + fileName);
+        if (file.exists() == false) {
+            return null;
+        }
+        ByteBuffer fileHeadBuffer = ByteBuffer.allocate(MmsMessage.DELIVER_MMS_FILENAME_LENGTH + MmsMessage.DELIVER_MMS_FILESIZE_LENGTH);
+        fileHeadBuffer.put(DELIVER_JSON_FILENAME_POSITION, fileName.getBytes(Packet.AGENT_CHARACTER_SET));
+        fileHeadBuffer.put(DELIVER_JSON_FILESIZE_POSITION, String.valueOf(file.length()).getBytes(Packet.AGENT_CHARACTER_SET));
+
+        return fileHeadBuffer;
+    }
 }
src/main/java/com/munjaon/client/server/service/CollectClientService.java
--- src/main/java/com/munjaon/client/server/service/CollectClientService.java
+++ src/main/java/com/munjaon/client/server/service/CollectClientService.java
@@ -4,7 +4,6 @@
 import com.munjaon.client.server.config.ErrorCode;
 import com.munjaon.client.server.packet.*;
 import com.munjaon.client.service.DatabaseTypeWorker;
-import com.munjaon.client.util.ByteUtil;
 import com.munjaon.client.util.MessageCheckUtil;
 import com.munjaon.client.util.MessageUtil;
 import org.json.simple.JSONObject;
@@ -417,20 +416,19 @@
             saveLog("[MESSAGE SEND] [... ...]");
             saveLog("[MESSAGE DATA : " + data.toString() + "]");
 
-            int mmsBufferLength = sendBuffer.capacity();
             socketChannel.write(sendBuffer);
 
             if (file01HeadBuffer != null) {
                 socketChannel.write(file01HeadBuffer);
-                mmsImageSend(path + data.getFilename01());
+                uploadFileSend(path + data.getFilename01());
             }
             if (file02HeadBuffer != null) {
                 socketChannel.write(file02HeadBuffer);
-                mmsImageSend(path + data.getFilename02());
+                uploadFileSend(path + data.getFilename02());
             }
             if (file03HeadBuffer != null) {
                 socketChannel.write(file03HeadBuffer);
-                mmsImageSend(path + data.getFilename03());
+                uploadFileSend(path + data.getFilename03());
             }
 
             long MSG_SEND_TIME = System.currentTimeMillis();
@@ -460,9 +458,9 @@
         }
     }
 
-    private void mmsImageSend(String imagePath) throws IOException {
+    private void uploadFileSend(String filePath) throws IOException {
         ByteBuffer buff = ByteBuffer.allocate(1024);
-        Path src = Paths.get(imagePath);
+        Path src = Paths.get(filePath);
 
         try (FileChannel rc = FileChannel.open(src, StandardOpenOption.READ)) {
             int num;
@@ -646,6 +644,83 @@
             /* 정상인 경우 메시지 전송 */
             ByteBuffer sendBuffer = ByteBuffer.allocate(Header.HEADER_LENGTH + KakaoMessage.DELIVER_KAKAO_BODY_LENGTH);
             ByteBuffer recvBuffer = ByteBuffer.allocate(Header.HEADER_LENGTH + KakaoMessage.DELIVER_KAKAO_ACK_BODY_LENGTH);
+
+            Header.putHeader(sendBuffer, Header.COMMAND_DELIVER, KakaoMessage.DELIVER_KAKAO_BODY_LENGTH);
+            KakaoMessage.makeDataForDeliver(sendBuffer, data);
+            saveLog("[MESSAGE SEND] [... ...]");
+            saveLog("[MESSAGE DATA : " + data.toString() + "]");
+
+            socketChannel.write(sendBuffer);
+
+            /* 파일 전송 */
+            ByteBuffer fileHeadBuffer = KakaoMessage.makeJsonHeaderForDeliver(path, data.getKakaoJsonFile());
+            socketChannel.write(fileHeadBuffer);
+            uploadFileSend(path + data.getKakaoJsonFile());
+
+            long MSG_SEND_TIME = System.currentTimeMillis();
+            while (true) {
+                if (System.currentTimeMillis() - MSG_SEND_TIME >= Packet.LIMIT_PACKET_SEND_TIMEOUT) {
+                    saveLog("[messageSendTimeOut : Expired ... ... ... ... ... ... ...]");
+                    throw new Exception("messageSendTimeOut : Expired ... ... ... ... ... ... ...");
+                }
+                int recvCount = socketChannel.read(recvBuffer);
+                if (recvCount == -1) {
+                    saveLog("[MESSAGE SEND] [FAIL] [SOCKET IS CLOSED]");
+                    throw new Exception("DELIVER ERROR");
+                } else if (recvCount > 0) {
+                    setDeliverMsgId(data.getMsgId());
+//                    worker.updateToDeliver(data.getMsgId());
+                    saveLog("[MESSAGE SEND] [SUCCESS]");
+                    lastPacketSendTime = System.currentTimeMillis();
+                    break;
+                }
+            }
+        } catch (Exception e) {
+            saveSystemLog("ERROR [" + e.getMessage() + "]");
+            saveSystemLog("ERROR DETAIL");
+            saveSystemLog(e.toString());
+            throw new Exception(e);
+        }
+    }
+
+    private void katMessageService_bak(MunjaonMsg data) throws Exception {
+        try {
+            /* 이미지 경로 디폴트 경로 사용 여부 */
+            String defaultYn = getProp("KAKAO", "DEFAULT_PATH_YN");
+            /* Kakao Json 저장 경로 */
+            String path = null;
+            if ("Y".equals(defaultYn)) {
+                path = System.getProperty("ROOTPATH") + File.separator + "kakaofile" + File.separator;
+            } else {
+                path = getProp("KAKAO", "FILEPATH") + File.separator;
+            }
+            /* 공통 메시지 유효성 체크 */
+            int checkCommonCode = MessageCheckUtil.validateMessageForCommon(data);
+            int checkMsgCode = MessageCheckUtil.validateMessageForKakao(data);
+            int checkFileCode = MessageCheckUtil.validateJsonFile(path, data.getKakaoJsonFile());
+
+            if (checkCommonCode != ErrorCode.OK.getCode() || checkMsgCode != ErrorCode.OK.getCode() || checkFileCode != ErrorCode.OK.getCode()) {
+                saveLog("[MESSAGE FILTER] [COMMON_CODE : " + checkCommonCode + "] [MSG_CODE : " + checkMsgCode + "] [JSON_FILE_CODE : " + checkFileCode + "]");
+                saveLog("[MESSAGE DATA : " + data.toString() + "]");
+                /* 전송처리 */
+                worker.updateToDeliver(data.getMsgId());
+                /* 실패처리 */
+                MunjaonMsg errorMsg = null;
+                if (checkCommonCode != ErrorCode.OK.getCode()) {
+                    errorMsg = MessageCheckUtil.setReportMessage(data.getMsgId(), "00", String.valueOf(checkCommonCode), MessageUtil.getTime(), "ETC");
+                }else if (checkMsgCode != ErrorCode.OK.getCode()) {
+                    errorMsg = MessageCheckUtil.setReportMessage(data.getMsgId(), "00", String.valueOf(checkMsgCode), MessageUtil.getTime(), "ETC");
+                } else {
+                    errorMsg = MessageCheckUtil.setReportMessage(data.getMsgId(), "00", String.valueOf(checkFileCode), MessageUtil.getTime(), "ETC");
+                }
+                worker.updateToReport(errorMsg);
+                /* 처리완료 */
+                return;
+            }
+
+            /* 정상인 경우 메시지 전송 */
+            ByteBuffer sendBuffer = ByteBuffer.allocate(Header.HEADER_LENGTH + KakaoMessage.DELIVER_KAKAO_BODY_LENGTH);
+            ByteBuffer recvBuffer = ByteBuffer.allocate(Header.HEADER_LENGTH + KakaoMessage.DELIVER_KAKAO_ACK_BODY_LENGTH);
             /* File check */
             ByteBuffer fileBuffer = KakaoMessage.makeJsonForDeliver(path, data.getKakaoJsonFile());
 
@@ -722,6 +797,82 @@
             /* 정상인 경우 메시지 전송 */
             ByteBuffer sendBuffer = ByteBuffer.allocate(Header.HEADER_LENGTH + KakaoMessage.DELIVER_KAKAO_BODY_LENGTH);
             ByteBuffer recvBuffer = ByteBuffer.allocate(Header.HEADER_LENGTH + KakaoMessage.DELIVER_KAKAO_ACK_BODY_LENGTH);
+
+            Header.putHeader(sendBuffer, Header.COMMAND_DELIVER, KakaoMessage.DELIVER_KAKAO_BODY_LENGTH);
+            KakaoMessage.makeDataForDeliver(sendBuffer, data);
+            saveLog("[MESSAGE SEND] [... ...]");
+            saveLog("[MESSAGE DATA : " + data.toString() + "]");
+
+            socketChannel.write(sendBuffer);
+
+            /* 파일 전송 */
+            ByteBuffer fileHeadBuffer = KakaoMessage.makeJsonHeaderForDeliver(path, data.getKakaoJsonFile());
+            socketChannel.write(fileHeadBuffer);
+            uploadFileSend(path + data.getKakaoJsonFile());
+
+            long MSG_SEND_TIME = System.currentTimeMillis();
+            while (true) {
+                if (System.currentTimeMillis() - MSG_SEND_TIME >= Packet.LIMIT_PACKET_SEND_TIMEOUT) {
+                    saveLog("[messageSendTimeOut : Expired ... ... ... ... ... ... ...]");
+                    throw new Exception("messageSendTimeOut : Expired ... ... ... ... ... ... ...");
+                }
+                int recvCount = socketChannel.read(recvBuffer);
+                if (recvCount == -1) {
+                    saveLog("[MESSAGE SEND] [FAIL] [SOCKET IS CLOSED]");
+                    throw new Exception("DELIVER ERROR");
+                } else if (recvCount > 0) {
+                    setDeliverMsgId(data.getMsgId());
+//                    worker.updateToDeliver(data.getMsgId());
+                    saveLog("[MESSAGE SEND] [SUCCESS]");
+                    lastPacketSendTime = System.currentTimeMillis();
+                    break;
+                }
+            }
+        } catch (Exception e) {
+            saveSystemLog("ERROR [" + e.getMessage() + "]");
+            saveSystemLog("ERROR DETAIL");
+            saveSystemLog(e.toString());
+            throw new Exception(e);
+        }
+    }
+
+    private void kftMessageService_bak(MunjaonMsg data) throws Exception {
+        try {
+            /* 이미지 경로 디폴트 경로 사용 여부 */
+            String defaultYn = getProp("KAKAO", "DEFAULT_PATH_YN");
+            /* Kakao Json 저장 경로 */
+            String path = null;
+            if ("Y".equals(defaultYn)) {
+                path = System.getProperty("ROOTPATH") + File.separator + "kakaofile" + File.separator;
+            } else {
+                path = getProp("KAKAO", "FILEPATH") + File.separator;
+            }
+            /* 공통 메시지 유효성 체크 */
+            int checkCommonCode = MessageCheckUtil.validateMessageForCommon(data);
+            int checkMsgCode = MessageCheckUtil.validateMessageForKakao(data);
+            int checkFileCode = MessageCheckUtil.validateJsonFile(path, data.getKakaoJsonFile());
+            if (checkCommonCode != ErrorCode.OK.getCode() || checkMsgCode != ErrorCode.OK.getCode() || checkFileCode != ErrorCode.OK.getCode()) {
+                saveLog("[MESSAGE FILTER] [COMMON_CODE : " + checkCommonCode + "] [MSG_CODE : " + checkMsgCode + "] [JSON_FILE_CODE : " + checkFileCode + "]");
+                saveLog("[MESSAGE DATA : " + data.toString() + "]");
+                /* 전송처리 */
+                worker.updateToDeliver(data.getMsgId());
+                /* 실패처리 */
+                MunjaonMsg errorMsg = null;
+                if (checkCommonCode != ErrorCode.OK.getCode()) {
+                    errorMsg = MessageCheckUtil.setReportMessage(data.getMsgId(), "00", String.valueOf(checkCommonCode), MessageUtil.getTime(), "ETC");
+                }else if (checkMsgCode != ErrorCode.OK.getCode()) {
+                    errorMsg = MessageCheckUtil.setReportMessage(data.getMsgId(), "00", String.valueOf(checkMsgCode), MessageUtil.getTime(), "ETC");
+                } else {
+                    errorMsg = MessageCheckUtil.setReportMessage(data.getMsgId(), "00", String.valueOf(checkFileCode), MessageUtil.getTime(), "ETC");
+                }
+                worker.updateToReport(errorMsg);
+                /* 처리완료 */
+                return;
+            }
+
+            /* 정상인 경우 메시지 전송 */
+            ByteBuffer sendBuffer = ByteBuffer.allocate(Header.HEADER_LENGTH + KakaoMessage.DELIVER_KAKAO_BODY_LENGTH);
+            ByteBuffer recvBuffer = ByteBuffer.allocate(Header.HEADER_LENGTH + KakaoMessage.DELIVER_KAKAO_ACK_BODY_LENGTH);
             /* File check */
             ByteBuffer fileBuffer = KakaoMessage.makeJsonForDeliver(path, data.getKakaoJsonFile());
 
Add a comment
List