패킷 전송 로직 일부 수정

This commit is contained in:
jangdongsin 2024-12-12 22:49:59 +09:00
parent b3c21f0345
commit 30d14f147f

View File

@ -272,7 +272,11 @@ public class CollectClientService extends Service {
SmsMessage.makeDataForDeliver(sendBuffer, data);
saveLog("[MESSAGE SEND] [... ...]");
saveLog("[MESSAGE DATA : " + data.toString() + "]");
socketChannel.write(sendBuffer);
while (sendBuffer.hasRemaining()) {
socketChannel.write(sendBuffer);
}
long MSG_SEND_TIME = System.currentTimeMillis();
while (true) {
if (System.currentTimeMillis() - MSG_SEND_TIME >= Packet.LIMIT_PACKET_SEND_TIMEOUT) {
@ -328,7 +332,11 @@ public class CollectClientService extends Service {
LmsMessage.makeDataForDeliver(sendBuffer, data);
saveLog("[MESSAGE SEND] [... ...]");
saveLog("[MESSAGE DATA : " + data.toString() + "]");
socketChannel.write(sendBuffer);
while (sendBuffer.hasRemaining()) {
socketChannel.write(sendBuffer);
}
long MSG_SEND_TIME = System.currentTimeMillis();
while (true) {
if (System.currentTimeMillis() - MSG_SEND_TIME >= Packet.LIMIT_PACKET_SEND_TIMEOUT) {
@ -505,132 +513,6 @@ public class CollectClientService extends Service {
}
}
private void mmsMessageService_bak(MunjaonMsg data) throws Exception {
try {
/* 이미지 경로 디폴트 경로 사용 여부 */
String defaultYn = getProp("MMS", "DEFAULT_PATH_YN");
/* MMS Image 저장 경로 */
String path = null;
if ("Y".equals(defaultYn)) {
path = System.getProperty("ROOTPATH") + File.separator + "mmsfile" + File.separator;
} else {
path = getProp("MMS", "FILEPATH") + File.separator;
}
/* 공통 메시지 유효성 체크 */
int checkCommonCode = MessageCheckUtil.validateMessageForCommon(data);
int checkMsgCode = MessageCheckUtil.validateMessageForMedia(data);
int checkImageCode = MessageCheckUtil.validateMessageForImage(data, path);
if (checkCommonCode != ErrorCode.OK.getCode() || checkMsgCode != ErrorCode.OK.getCode() || checkImageCode != ErrorCode.OK.getCode()) {
saveLog("[MESSAGE FILTER] [COMMON_CODE : " + checkCommonCode + "] [MSG_CODE : " + checkMsgCode + "] [IMAGE_CODE : " + checkImageCode + "]");
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(checkImageCode), MessageUtil.getTime(), "ETC");
}
worker.updateToReport(errorMsg);
/* 처리완료 */
return;
}
/* 정상인 경우 메시지 전송 */
ByteBuffer sendBuffer = ByteBuffer.allocate(Header.HEADER_LENGTH + MmsMessage.DELIVER_MMS_BODY_LENGTH);
ByteBuffer recvBuffer = ByteBuffer.allocate(Header.HEADER_LENGTH + MmsMessage.DELIVER_MMS_ACK_BODY_LENGTH);
int fileCount = 0;
/* File check */
ByteBuffer file01Buffer = MmsMessage.makeImageForDeliver(path, data.getFilename01());
if (file01Buffer != null) {
saveLog("file01Buffer : " + file01Buffer.capacity());
fileCount++;
}
ByteBuffer file02Buffer = MmsMessage.makeImageForDeliver(path, data.getFilename02());
if (file02Buffer != null) {
saveLog("file02Buffer : " + file02Buffer.capacity());
fileCount++;
}
ByteBuffer file03Buffer = MmsMessage.makeImageForDeliver(path, data.getFilename03());
if (file03Buffer != null) {
saveLog("file03Buffer : " + file03Buffer.capacity());
fileCount++;
}
/* fileCount 저장 */
data.setFileCount(fileCount);
Header.putHeader(sendBuffer, Header.COMMAND_DELIVER, MmsMessage.DELIVER_MMS_BODY_LENGTH);
MmsMessage.makeDataForDeliver(sendBuffer, data);
saveLog("[MESSAGE SEND] [... ...]");
saveLog("[MESSAGE DATA : " + data.toString() + "]");
ByteBuffer[] byteBuffers = new ByteBuffer[fileCount + 1];
int index = 0;
int mmsBufferLength = sendBuffer.capacity();
byteBuffers[index] = sendBuffer;
socketChannel.write(sendBuffer);
index++;
if (file01Buffer != null) {
System.out.println("file01Buffer Last = " + file01Buffer.get(file01Buffer.capacity() - 1));
mmsBufferLength += file01Buffer.capacity();
byteBuffers[index] = file01Buffer;
socketChannel.write(file01Buffer);
index++;
}
if (file02Buffer != null) {
System.out.println("file02Buffer Last = " + file02Buffer.get(file02Buffer.capacity() - 1));
mmsBufferLength += file02Buffer.capacity();
byteBuffers[index] = file02Buffer;
socketChannel.write(file02Buffer);
index++;
}
if (file03Buffer != null) {
System.out.println("file03Buffer Last = " + file03Buffer.get(file03Buffer.capacity() - 1));
mmsBufferLength += file03Buffer.capacity();
byteBuffers[index] = file03Buffer;
socketChannel.write(file03Buffer);
}
saveSystemLog("mmsBufferLength : " + mmsBufferLength);
saveSystemLog("byteBuffers : " + byteBuffers.length);
ByteBuffer mmsSendBuffer = ByteBuffer.allocate(mmsBufferLength);
Packet.mergeBuffers(mmsSendBuffer, byteBuffers);
System.out.println("mmsSendBuffer Last = " + mmsSendBuffer.get(mmsSendBuffer.capacity() - 1));
// socketChannel.write(mmsSendBuffer);
// socketChannel.write(byteBuffers);
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) {
e.printStackTrace();
saveSystemLog("ERROR [" + e.getMessage() + "]");
saveSystemLog("ERROR DETAIL");
saveSystemLog(e.toString());
throw new Exception(e);
}
}
private void katMessageService(MunjaonMsg data) throws Exception {
try {
/* 이미지 경로 디폴트 경로 사용 여부 */
@ -675,7 +557,9 @@ public class CollectClientService extends Service {
saveLog("[MESSAGE SEND] [... ...]");
saveLog("[MESSAGE DATA : " + data.toString() + "]");
socketChannel.write(sendBuffer);
while (sendBuffer.hasRemaining()) {
socketChannel.write(sendBuffer);
}
/* 파일 전송 */
ByteBuffer fileHeadBuffer = KakaoMessage.makeJsonHeaderForDeliver(path, data.getKakaoJsonFile());
@ -715,83 +599,6 @@ public class CollectClientService extends Service {
}
}
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());
Header.putHeader(sendBuffer, Header.COMMAND_DELIVER, KakaoMessage.DELIVER_KAKAO_BODY_LENGTH);
KakaoMessage.makeDataForDeliver(sendBuffer, data);
saveLog("[MESSAGE SEND] [... ...]");
saveLog("[MESSAGE DATA : " + data.toString() + "]");
ByteBuffer[] byteBuffers = new ByteBuffer[2];
byteBuffers[0] = sendBuffer;
byteBuffers[1] = fileBuffer;
socketChannel.write(byteBuffers);
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(MunjaonMsg data) throws Exception {
try {
/* 이미지 경로 디폴트 경로 사용 여부 */
@ -835,7 +642,9 @@ public class CollectClientService extends Service {
saveLog("[MESSAGE SEND] [... ...]");
saveLog("[MESSAGE DATA : " + data.toString() + "]");
socketChannel.write(sendBuffer);
while (sendBuffer.hasRemaining()) {
socketChannel.write(sendBuffer);
}
/* 파일 전송 */
ByteBuffer fileHeadBuffer = KakaoMessage.makeJsonHeaderForDeliver(path, data.getKakaoJsonFile());
@ -875,82 +684,6 @@ public class CollectClientService extends Service {
}
}
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());
Header.putHeader(sendBuffer, Header.COMMAND_DELIVER, KakaoMessage.DELIVER_KAKAO_BODY_LENGTH);
KakaoMessage.makeDataForDeliver(sendBuffer, data);
saveLog("[MESSAGE SEND] [... ...]");
saveLog("[MESSAGE DATA : " + data.toString() + "]");
ByteBuffer[] byteBuffers = new ByteBuffer[2];
byteBuffers[0] = sendBuffer;
byteBuffers[1] = fileBuffer;
socketChannel.write(byteBuffers);
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 linkCheckService() {
if (System.currentTimeMillis() - lastPacketSendTime < Packet.LINK_CHECK_CYCLE) {
return;