--- src/main/java/com/munjaon/server/server/task/CollectServerTask.java
+++ src/main/java/com/munjaon/server/server/task/CollectServerTask.java
... | ... | @@ -182,7 +182,7 @@ |
| 182 | 182 |
return false; |
| 183 | 183 |
} |
| 184 | 184 |
|
| 185 |
- private void recvDeliver(SocketChannel channel, ByteBuffer headBuffer) throws IOException {
|
|
| 185 |
+ private void recvDeliver(SocketChannel channel, ByteBuffer headBuffer) throws Exception {
|
|
| 186 | 186 |
/* 서비스 중지여부 체크 */ |
| 187 | 187 |
if (isExpireService()) {
|
| 188 | 188 |
expireConnectUser(); |
... | ... | @@ -254,7 +254,7 @@ |
| 254 | 254 |
return messageDto; |
| 255 | 255 |
} |
| 256 | 256 |
|
| 257 |
- private void recvSmsDeliver(SocketChannel channel, ByteBuffer headBuffer) throws IOException {
|
|
| 257 |
+ private void recvSmsDeliver(SocketChannel channel, ByteBuffer headBuffer) throws Exception {
|
|
| 258 | 258 |
try {
|
| 259 | 259 |
ByteBuffer bodyBuffer = ByteBuffer.allocate(SmsMessage.DELIVER_SMS_BODY_LENGTH); |
| 260 | 260 |
channel.read(bodyBuffer); |
... | ... | @@ -283,11 +283,12 @@ |
| 283 | 283 |
connectUserDto.updateLastTrafficTime(); |
| 284 | 284 |
} |
| 285 | 285 |
} catch (Exception e) {
|
| 286 |
- e.printStackTrace(); |
|
| 286 |
+ saveLog(e); |
|
| 287 |
+ throw e; |
|
| 287 | 288 |
} |
| 288 | 289 |
} |
| 289 | 290 |
|
| 290 |
- private void recvLmsDeliver(SocketChannel channel, ByteBuffer headBuffer) throws IOException {
|
|
| 291 |
+ private void recvLmsDeliver(SocketChannel channel, ByteBuffer headBuffer) throws Exception {
|
|
| 291 | 292 |
try {
|
| 292 | 293 |
ByteBuffer bodyBuffer = ByteBuffer.allocate(LmsMessage.DELIVER_LMS_BODY_LENGTH); |
| 293 | 294 |
channel.read(bodyBuffer); |
... | ... | @@ -316,11 +317,12 @@ |
| 316 | 317 |
connectUserDto.updateLastTrafficTime(); |
| 317 | 318 |
} |
| 318 | 319 |
} catch (Exception e) {
|
| 319 |
- e.printStackTrace(); |
|
| 320 |
+ saveLog(e); |
|
| 321 |
+ throw e; |
|
| 320 | 322 |
} |
| 321 | 323 |
} |
| 322 | 324 |
|
| 323 |
- private void recvMmsDeliver(SocketChannel channel, ByteBuffer headBuffer) throws IOException {
|
|
| 325 |
+ private void recvMmsDeliver(SocketChannel channel, ByteBuffer headBuffer) throws Exception {
|
|
| 324 | 326 |
try {
|
| 325 | 327 |
long MSG_RECV_TIME = System.currentTimeMillis(); // 메시지를 수신한 시간 |
| 326 | 328 |
ByteBuffer bodyBuffer = ByteBuffer.allocate(MmsMessage.DELIVER_MMS_BODY_LENGTH); |
... | ... | @@ -370,7 +372,7 @@ |
| 370 | 372 |
long IMAGE_RECV_TIME = System.currentTimeMillis(); // 이미지 패킷 처리 시작시간 |
| 371 | 373 |
while (true) {
|
| 372 | 374 |
int bufferSize = 1024; |
| 373 |
- if (recvFileSize < fileSize) {
|
|
| 375 |
+ if ((fileSize - recvFileSize) < 1024) {
|
|
| 374 | 376 |
bufferSize = fileSize - recvFileSize; |
| 375 | 377 |
} |
| 376 | 378 |
|
... | ... | @@ -384,15 +386,15 @@ |
| 384 | 386 |
} |
| 385 | 387 |
|
| 386 | 388 |
if (recvFileSize == fileSize) {
|
| 387 |
- if (saveFileCount == 0) {
|
|
| 389 |
+ saveFileCount = saveFileCount + 1; // 수신한 파일 카운트 증가 |
|
| 390 |
+ if (saveFileCount == 1) {
|
|
| 388 | 391 |
messageDto.setUserFileName01(imagePath + File.separator + fileName); |
| 389 |
- } else if (saveFileCount == 1) {
|
|
| 390 |
- messageDto.setUserFileName02(imagePath + File.separator + fileName); |
|
| 391 | 392 |
} else if (saveFileCount == 2) {
|
| 393 |
+ messageDto.setUserFileName02(imagePath + File.separator + fileName); |
|
| 394 |
+ } else if (saveFileCount == 3) {
|
|
| 392 | 395 |
messageDto.setUserFileName03(imagePath + File.separator + fileName); |
| 393 | 396 |
} |
| 394 | 397 |
JobFileFactory.saveFileForByteBuffer(imagePath, fileName, fileBuffer); |
| 395 |
- saveFileCount++; // 수신한 파일 카운트 증가 |
|
| 396 | 398 |
break; |
| 397 | 399 |
} |
| 398 | 400 |
|
... | ... | @@ -402,40 +404,14 @@ |
| 402 | 404 |
break; |
| 403 | 405 |
} |
| 404 | 406 |
} |
| 405 |
-// ByteBuffer fileBuffer = ByteBuffer.allocate(Integer.parseInt(fileSize)); |
|
| 406 |
-// channel.read(fileBuffer); |
|
| 407 |
-// saveSystemLog("fileBuffer Last : " + fileBuffer.get(fileBuffer.capacity() - 1));
|
|
| 408 |
-// fileBuffer.flip(); |
|
| 409 |
-// JobFileFactory.saveFileForByteBuffer(imagePath, fileName, fileBuffer); |
|
| 410 |
-// if (saveFileCount == 0) {
|
|
| 411 |
-// messageDto.setUserFileName01(imagePath + File.separator + fileName); |
|
| 412 |
-// } else if (saveFileCount == 1) {
|
|
| 413 |
-// messageDto.setUserFileName02(imagePath + File.separator + fileName); |
|
| 414 |
-// } else if (saveFileCount == 2) {
|
|
| 415 |
-// messageDto.setUserFileName03(imagePath + File.separator + fileName); |
|
| 416 |
-// } |
|
| 417 |
-// saveLog(printTaskLog() + "[MMS IMAGE] [File : " + fileName + ", Size : " + fileSize + "]"); |
|
| 418 |
-// saveFileCount++; // 수신한 파일 카운트 증가 |
|
| 419 | 407 |
} |
| 420 | 408 |
|
| 421 |
-// for (int i = 0; i < recvFileCount; i++) {
|
|
| 422 |
-// ByteBuffer fileHeadBuffer = ByteBuffer.allocate(MmsMessage.DELIVER_MMS_FILENAME_LENGTH + MmsMessage.DELIVER_MMS_FILESIZE_LENGTH); |
|
| 423 |
-// channel.read(fileHeadBuffer); |
|
| 424 |
-// String fileName = MmsMessage.getFileNameForDeliver(fileHeadBuffer); |
|
| 425 |
-// String fileSize = MmsMessage.getFileSizeForDeliver(fileHeadBuffer); |
|
| 426 |
-// ByteBuffer fileBuffer = ByteBuffer.allocate(Integer.parseInt(fileSize)); |
|
| 427 |
-// channel.read(fileBuffer); |
|
| 428 |
-// fileBuffer.flip(); |
|
| 429 |
-// JobFileFactory.saveFileForByteBuffer(imagePath, fileName, fileBuffer); |
|
| 430 |
-// if (i == 0) {
|
|
| 431 |
-// messageDto.setUserFileName01(imagePath + File.separator + fileName); |
|
| 432 |
-// } else if (i == 1) {
|
|
| 433 |
-// messageDto.setUserFileName02(imagePath + File.separator + fileName); |
|
| 434 |
-// } else if (i == 2) {
|
|
| 435 |
-// messageDto.setUserFileName03(imagePath + File.separator + fileName); |
|
| 436 |
-// } |
|
| 437 |
-// saveLog(printTaskLog() + "[MMS IMAGE] [File : " + fileName + ", Size : " + fileSize + "]"); |
|
| 438 |
-// } |
|
| 409 |
+ /* 이미지를 모두 수신하지 못한 경우 */ |
|
| 410 |
+ if (recvFileCount == 0 || (recvFileCount != saveFileCount)) {
|
|
| 411 |
+ saveLog(printTaskLog() + "[MMS File Count : " + recvFileCount + " | saveFileCount : " + saveFileCount + "]"); |
|
| 412 |
+ expireConnectUser(); |
|
| 413 |
+ return; |
|
| 414 |
+ } |
|
| 439 | 415 |
|
| 440 | 416 |
/* 사용자 단가, 발송망 설정 */ |
| 441 | 417 |
MemberDto savedMemberDto = null; |
... | ... | @@ -463,11 +439,94 @@ |
| 463 | 439 |
connectUserDto.updateLastTrafficTime(); |
| 464 | 440 |
} |
| 465 | 441 |
} catch (Exception e) {
|
| 466 |
- e.printStackTrace(); |
|
| 442 |
+ saveLog(e); |
|
| 443 |
+ throw e; |
|
| 467 | 444 |
} |
| 468 | 445 |
} |
| 469 | 446 |
|
| 470 |
- private void recvKatDeliver(SocketChannel channel, ByteBuffer headBuffer) throws IOException {
|
|
| 447 |
+ private void recvKatDeliver(SocketChannel channel, ByteBuffer headBuffer) throws Exception {
|
|
| 448 |
+ try {
|
|
| 449 |
+ ByteBuffer bodyBuffer = ByteBuffer.allocate(KakaoMessage.DELIVER_KAKAO_BODY_LENGTH); |
|
| 450 |
+ channel.read(bodyBuffer); |
|
| 451 |
+ ByteBuffer deliverBuffer = ByteBuffer.allocate(Header.HEADER_LENGTH + KakaoMessage.DELIVER_KAKAO_BODY_LENGTH); |
|
| 452 |
+ Packet.mergeBuffers(deliverBuffer, headBuffer, bodyBuffer); |
|
| 453 |
+ |
|
| 454 |
+ BasicMessageDto messageDto = recvCommonMessage(deliverBuffer); |
|
| 455 |
+ messageDto.setUserSubject(KakaoMessage.getSubjectForDeliver(deliverBuffer)); |
|
| 456 |
+ messageDto.setUserMessage(KakaoMessage.getMessageForDeliver(deliverBuffer)); |
|
| 457 |
+ messageDto.setKakaoSenderKey(KakaoMessage.getKakaoSenderKeyForDeliver(deliverBuffer)); |
|
| 458 |
+ messageDto.setKakaoTemplateCode(KakaoMessage.getKakaoTemplateCodeForDeliver(deliverBuffer)); |
|
| 459 |
+ |
|
| 460 |
+ String jsonPath = System.getProperty("ROOTPATH") + File.separator + "kakaofile";
|
|
| 461 |
+ jsonPath = jsonPath + File.separator + MessageUtil.getDate() + File.separator + SerialNoUtil.getSerialNo(); |
|
| 462 |
+ FileUtil.mkdirs(jsonPath); |
|
| 463 |
+ |
|
| 464 |
+ ByteBuffer fileHeadBuffer = ByteBuffer.allocate(KakaoMessage.DELIVER_JSON_FILENAME_LENGTH + KakaoMessage.DELIVER_JSON_FILESIZE_LENGTH); |
|
| 465 |
+ channel.read(fileHeadBuffer); |
|
| 466 |
+ |
|
| 467 |
+ String fileName = KakaoMessage.getFileNameForDeliver(fileHeadBuffer); |
|
| 468 |
+ int fileSize = Integer.parseInt(KakaoMessage.getFileSizeForDeliver(fileHeadBuffer)); |
|
| 469 |
+ |
|
| 470 |
+ ByteBuffer fileBuffer = ByteBuffer.allocate(fileSize); |
|
| 471 |
+ /* 파일 수신 */ |
|
| 472 |
+ int recvFileSize = 0; |
|
| 473 |
+ long IMAGE_RECV_TIME = System.currentTimeMillis(); // 파일 패킷 처리 시작시간 |
|
| 474 |
+ while (true) {
|
|
| 475 |
+ int bufferSize = 1024; |
|
| 476 |
+ if ((fileSize - recvFileSize) < 1024) {
|
|
| 477 |
+ bufferSize = fileSize - recvFileSize; |
|
| 478 |
+ } |
|
| 479 |
+ |
|
| 480 |
+ ByteBuffer buffer = ByteBuffer.allocate(bufferSize); |
|
| 481 |
+ int unitRecvCnt = channel.read(buffer); |
|
| 482 |
+ if (unitRecvCnt > 0) {
|
|
| 483 |
+ Packet.mergeBuffers(fileBuffer, buffer, recvFileSize); |
|
| 484 |
+ recvFileSize += unitRecvCnt; |
|
| 485 |
+ saveLog("unitRecvCnt : " + unitRecvCnt);
|
|
| 486 |
+ saveLog("recvFileSize : " + recvFileSize);
|
|
| 487 |
+ } |
|
| 488 |
+ |
|
| 489 |
+ if (recvFileSize == fileSize) {
|
|
| 490 |
+ JobFileFactory.saveFileForByteBuffer(jsonPath, fileName, fileBuffer); |
|
| 491 |
+ messageDto.setKakaoJsonFile(jsonPath + File.separator + fileName); |
|
| 492 |
+ saveLog(printTaskLog() + "[KAT JSON] [File : " + fileName + ", Size : " + fileSize + "]"); |
|
| 493 |
+ break; |
|
| 494 |
+ } |
|
| 495 |
+ |
|
| 496 |
+ if (System.currentTimeMillis() - IMAGE_RECV_TIME > 3000) {
|
|
| 497 |
+ /* MMS 이미지 파일 수신 timeout */ |
|
| 498 |
+ saveLog(printTaskLog() + "[KAKAO File : " + fileName + " : Expired ... ... ... ... ... ... ...]"); |
|
| 499 |
+ expireConnectUser(); |
|
| 500 |
+ return; |
|
| 501 |
+ } |
|
| 502 |
+ } |
|
| 503 |
+ |
|
| 504 |
+ /* 사용자 단가, 발송망 설정 */ |
|
| 505 |
+ MemberDto savedMemberDto = null; |
|
| 506 |
+ if (this.connectUserDto != null) {
|
|
| 507 |
+ savedMemberDto = this.connectUserDto.getMemberDto(); |
|
| 508 |
+ } |
|
| 509 |
+ if (savedMemberDto != null) {
|
|
| 510 |
+ messageDto.setRouterSeq(savedMemberDto.getKakaoAtAgentCode()); |
|
| 511 |
+ messageDto.setUnitCost(String.valueOf(savedMemberDto.getKakaoAtPrice())); |
|
| 512 |
+ } |
|
| 513 |
+ |
|
| 514 |
+ saveLog(printTaskLog() + "[MESSAGE : " + messageDto.toString() + "]"); |
|
| 515 |
+ QueueTypeWorker worker = QueueTypeWorker.find("KAT");
|
|
| 516 |
+ if (worker != null) {
|
|
| 517 |
+ worker.pushQueue(messageDto); |
|
| 518 |
+ channel.write(KakaoMessage.makeDeliverAckBuffer(messageDto.getUserMsgID(), messageDto.getSendStatus())); |
|
| 519 |
+ connectUserDto.updateLastTrafficTime(); |
|
| 520 |
+ } else {
|
|
| 521 |
+ saveSystemLog("worker is null");
|
|
| 522 |
+ } |
|
| 523 |
+ } catch (Exception e) {
|
|
| 524 |
+ saveLog(e); |
|
| 525 |
+ throw e; |
|
| 526 |
+ } |
|
| 527 |
+ } |
|
| 528 |
+ |
|
| 529 |
+ private void recvKatDeliver_bak(SocketChannel channel, ByteBuffer headBuffer) throws IOException {
|
|
| 471 | 530 |
try {
|
| 472 | 531 |
ByteBuffer bodyBuffer = ByteBuffer.allocate(KakaoMessage.DELIVER_KAKAO_BODY_LENGTH); |
| 473 | 532 |
channel.read(bodyBuffer); |
... | ... | @@ -522,7 +581,87 @@ |
| 522 | 581 |
} |
| 523 | 582 |
} |
| 524 | 583 |
|
| 525 |
- private void recvKftDeliver(SocketChannel channel, ByteBuffer headBuffer) throws IOException {
|
|
| 584 |
+ private void recvKftDeliver(SocketChannel channel, ByteBuffer headBuffer) throws Exception {
|
|
| 585 |
+ try {
|
|
| 586 |
+ ByteBuffer bodyBuffer = ByteBuffer.allocate(KakaoMessage.DELIVER_KAKAO_BODY_LENGTH); |
|
| 587 |
+ channel.read(bodyBuffer); |
|
| 588 |
+ ByteBuffer deliverBuffer = ByteBuffer.allocate(Header.HEADER_LENGTH + KakaoMessage.DELIVER_KAKAO_BODY_LENGTH); |
|
| 589 |
+ Packet.mergeBuffers(deliverBuffer, headBuffer, bodyBuffer); |
|
| 590 |
+ |
|
| 591 |
+ BasicMessageDto messageDto = recvCommonMessage(deliverBuffer); |
|
| 592 |
+ messageDto.setUserSubject(KakaoMessage.getSubjectForDeliver(deliverBuffer)); |
|
| 593 |
+ messageDto.setUserMessage(KakaoMessage.getMessageForDeliver(deliverBuffer)); |
|
| 594 |
+ messageDto.setKakaoSenderKey(KakaoMessage.getKakaoSenderKeyForDeliver(deliverBuffer)); |
|
| 595 |
+ messageDto.setKakaoTemplateCode(KakaoMessage.getKakaoTemplateCodeForDeliver(deliverBuffer)); |
|
| 596 |
+ |
|
| 597 |
+ String jsonPath = System.getProperty("ROOTPATH") + File.separator + "kakaofile";
|
|
| 598 |
+ jsonPath = jsonPath + File.separator + MessageUtil.getDate() + File.separator + SerialNoUtil.getSerialNo(); |
|
| 599 |
+ FileUtil.mkdirs(jsonPath); |
|
| 600 |
+ |
|
| 601 |
+ ByteBuffer fileHeadBuffer = ByteBuffer.allocate(KakaoMessage.DELIVER_JSON_FILENAME_LENGTH + KakaoMessage.DELIVER_JSON_FILESIZE_LENGTH); |
|
| 602 |
+ channel.read(fileHeadBuffer); |
|
| 603 |
+ |
|
| 604 |
+ String fileName = KakaoMessage.getFileNameForDeliver(fileHeadBuffer); |
|
| 605 |
+ int fileSize = Integer.parseInt(KakaoMessage.getFileSizeForDeliver(fileHeadBuffer)); |
|
| 606 |
+ |
|
| 607 |
+ ByteBuffer fileBuffer = ByteBuffer.allocate(fileSize); |
|
| 608 |
+ /* 파일 수신 */ |
|
| 609 |
+ int recvFileSize = 0; |
|
| 610 |
+ long IMAGE_RECV_TIME = System.currentTimeMillis(); // 파일 패킷 처리 시작시간 |
|
| 611 |
+ while (true) {
|
|
| 612 |
+ int bufferSize = 1024; |
|
| 613 |
+ if ((fileSize - recvFileSize) < 1024) {
|
|
| 614 |
+ bufferSize = fileSize - recvFileSize; |
|
| 615 |
+ } |
|
| 616 |
+ |
|
| 617 |
+ ByteBuffer buffer = ByteBuffer.allocate(bufferSize); |
|
| 618 |
+ int unitRecvCnt = channel.read(buffer); |
|
| 619 |
+ if (unitRecvCnt > 0) {
|
|
| 620 |
+ Packet.mergeBuffers(fileBuffer, buffer, recvFileSize); |
|
| 621 |
+ recvFileSize += unitRecvCnt; |
|
| 622 |
+ saveLog("unitRecvCnt : " + unitRecvCnt);
|
|
| 623 |
+ saveLog("recvFileSize : " + recvFileSize);
|
|
| 624 |
+ } |
|
| 625 |
+ |
|
| 626 |
+ if (recvFileSize == fileSize) {
|
|
| 627 |
+ JobFileFactory.saveFileForByteBuffer(jsonPath, fileName, fileBuffer); |
|
| 628 |
+ messageDto.setKakaoJsonFile(jsonPath + File.separator + fileName); |
|
| 629 |
+ saveLog(printTaskLog() + "[KAT JSON] [File : " + fileName + ", Size : " + fileSize + "]"); |
|
| 630 |
+ break; |
|
| 631 |
+ } |
|
| 632 |
+ |
|
| 633 |
+ if (System.currentTimeMillis() - IMAGE_RECV_TIME > 3000) {
|
|
| 634 |
+ /* MMS 이미지 파일 수신 timeout */ |
|
| 635 |
+ saveLog(printTaskLog() + "[KAKAO File : " + fileName + " : Expired ... ... ... ... ... ... ...]"); |
|
| 636 |
+ expireConnectUser(); |
|
| 637 |
+ return; |
|
| 638 |
+ } |
|
| 639 |
+ } |
|
| 640 |
+ |
|
| 641 |
+ /* 사용자 단가, 발송망 설정 */ |
|
| 642 |
+ MemberDto savedMemberDto = null; |
|
| 643 |
+ if (this.connectUserDto != null) {
|
|
| 644 |
+ savedMemberDto = this.connectUserDto.getMemberDto(); |
|
| 645 |
+ } |
|
| 646 |
+ if (savedMemberDto != null) {
|
|
| 647 |
+ messageDto.setRouterSeq(savedMemberDto.getKakaoFtAgentCode()); |
|
| 648 |
+ messageDto.setUnitCost(String.valueOf(savedMemberDto.getKakaoFtPrice())); |
|
| 649 |
+ } |
|
| 650 |
+ |
|
| 651 |
+ saveLog(printTaskLog() + "[MESSAGE : " + messageDto.toString() + "]"); |
|
| 652 |
+ QueueTypeWorker worker = QueueTypeWorker.find("KFT");
|
|
| 653 |
+ if (worker != null) {
|
|
| 654 |
+ worker.pushQueue(messageDto); |
|
| 655 |
+ channel.write(KakaoMessage.makeDeliverAckBuffer(messageDto.getUserMsgID(), messageDto.getSendStatus())); |
|
| 656 |
+ connectUserDto.updateLastTrafficTime(); |
|
| 657 |
+ } |
|
| 658 |
+ } catch (Exception e) {
|
|
| 659 |
+ saveLog(e); |
|
| 660 |
+ throw e; |
|
| 661 |
+ } |
|
| 662 |
+ } |
|
| 663 |
+ |
|
| 664 |
+ private void recvKftDeliver_bak(SocketChannel channel, ByteBuffer headBuffer) throws IOException {
|
|
| 526 | 665 |
try {
|
| 527 | 666 |
ByteBuffer bodyBuffer = ByteBuffer.allocate(KakaoMessage.DELIVER_KAKAO_BODY_LENGTH); |
| 528 | 667 |
channel.read(bodyBuffer); |
Add a comment
Delete comment
Once you delete this comment, you won't be able to recover it. Are you sure you want to delete this comment?