--- src/main/java/com/munjaon/server/server/packet/common/Packet.java
+++ src/main/java/com/munjaon/server/server/packet/common/Packet.java
... | ... | @@ -61,6 +61,16 @@ |
| 61 | 61 |
} |
| 62 | 62 |
} |
| 63 | 63 |
|
| 64 |
+ public static void mergeBuffers(ByteBuffer dest, ByteBuffer src, int destOffset) {
|
|
| 65 |
+ if (dest == null || src == null) {
|
|
| 66 |
+ return; |
|
| 67 |
+ } |
|
| 68 |
+ |
|
| 69 |
+ for (int i = 0; i < src.capacity(); i++) {
|
|
| 70 |
+ dest.put((destOffset + i), src.get(i)); |
|
| 71 |
+ } |
|
| 72 |
+ } |
|
| 73 |
+ |
|
| 64 | 74 |
public static void printBuffer(ByteBuffer buffer) {
|
| 65 | 75 |
if (buffer == null) {
|
| 66 | 76 |
return; |
--- src/main/java/com/munjaon/server/server/task/CollectServerTask.java
+++ src/main/java/com/munjaon/server/server/task/CollectServerTask.java
... | ... | @@ -322,6 +322,7 @@ |
| 322 | 322 |
|
| 323 | 323 |
private void recvMmsDeliver(SocketChannel channel, ByteBuffer headBuffer) throws IOException {
|
| 324 | 324 |
try {
|
| 325 |
+ long MSG_RECV_TIME = System.currentTimeMillis(); // 메시지를 수신한 시간 |
|
| 325 | 326 |
ByteBuffer bodyBuffer = ByteBuffer.allocate(MmsMessage.DELIVER_MMS_BODY_LENGTH); |
| 326 | 327 |
channel.read(bodyBuffer); |
| 327 | 328 |
ByteBuffer deliverBuffer = ByteBuffer.allocate(Header.HEADER_LENGTH + MmsMessage.DELIVER_MMS_BODY_LENGTH); |
... | ... | @@ -341,24 +342,100 @@ |
| 341 | 342 |
imagePath = imagePath + File.separator + MessageUtil.getDate() + File.separator + SerialNoUtil.getSerialNo(); |
| 342 | 343 |
FileUtil.mkdirs(imagePath); |
| 343 | 344 |
|
| 344 |
- for (int i = 0; i < recvFileCount; i++) {
|
|
| 345 |
- ByteBuffer fileHeadBuffer = ByteBuffer.allocate(MmsMessage.DELIVER_MMS_FILENAME_LENGTH + MmsMessage.DELIVER_MMS_FILESIZE_LENGTH); |
|
| 346 |
- channel.read(fileHeadBuffer); |
|
| 347 |
- String fileName = MmsMessage.getFileNameForDeliver(fileHeadBuffer); |
|
| 348 |
- String fileSize = MmsMessage.getFileSizeForDeliver(fileHeadBuffer); |
|
| 349 |
- ByteBuffer fileBuffer = ByteBuffer.allocate(Integer.parseInt(fileSize)); |
|
| 350 |
- channel.read(fileBuffer); |
|
| 351 |
- fileBuffer.flip(); |
|
| 352 |
- JobFileFactory.saveFileForByteBuffer(imagePath, fileName, fileBuffer); |
|
| 353 |
- if (i == 0) {
|
|
| 354 |
- messageDto.setUserFileName01(imagePath + File.separator + fileName); |
|
| 355 |
- } else if (i == 1) {
|
|
| 356 |
- messageDto.setUserFileName02(imagePath + File.separator + fileName); |
|
| 357 |
- } else if (i == 2) {
|
|
| 358 |
- messageDto.setUserFileName03(imagePath + File.separator + fileName); |
|
| 345 |
+ int saveFileCount = 0; |
|
| 346 |
+ while (true) {
|
|
| 347 |
+ if (recvFileCount == saveFileCount) { // 이미지 파일을 모두 수신한 경우
|
|
| 348 |
+ break; |
|
| 359 | 349 |
} |
| 360 |
- saveLog(printTaskLog() + "[MMS IMAGE] [File : " + fileName + ", Size : " + fileSize + "]"); |
|
| 350 |
+ if (System.currentTimeMillis() - MSG_RECV_TIME > 10000) {
|
|
| 351 |
+ /* MMS 파일 수신 timeout */ |
|
| 352 |
+ saveLog(printTaskLog() + "[MMS File TimeOut : Expired ... ... ... ... ... ... ...]"); |
|
| 353 |
+ expireConnectUser(); |
|
| 354 |
+ return; |
|
| 355 |
+ } |
|
| 356 |
+ /* MMS 파일 수신 */ |
|
| 357 |
+ ByteBuffer fileHeadBuffer = ByteBuffer.allocate(MmsMessage.DELIVER_MMS_FILENAME_LENGTH + MmsMessage.DELIVER_MMS_FILESIZE_LENGTH); |
|
| 358 |
+ int recvCount = channel.read(fileHeadBuffer); |
|
| 359 |
+ if (recvCount == 0) { // 수신한 바이트가 없거나 끊긴 경우
|
|
| 360 |
+ continue; |
|
| 361 |
+ } |
|
| 362 |
+ |
|
| 363 |
+ /* 이미지 파일 패킷 수진 */ |
|
| 364 |
+ String fileName = MmsMessage.getFileNameForDeliver(fileHeadBuffer); |
|
| 365 |
+ int fileSize = Integer.parseInt(MmsMessage.getFileSizeForDeliver(fileHeadBuffer)); |
|
| 366 |
+ saveLog("[MMS File Name : " + fileName + ", File Size : " + fileSize + "]");
|
|
| 367 |
+ |
|
| 368 |
+ int recvFileSize = 0; |
|
| 369 |
+ ByteBuffer fileBuffer = ByteBuffer.allocate(fileSize); |
|
| 370 |
+ long IMAGE_RECV_TIME = System.currentTimeMillis(); // 이미지 패킷 처리 시작시간 |
|
| 371 |
+ while (true) {
|
|
| 372 |
+ int bufferSize = 1024; |
|
| 373 |
+ if (recvFileSize < fileSize) {
|
|
| 374 |
+ bufferSize = fileSize - recvFileSize; |
|
| 375 |
+ } |
|
| 376 |
+ |
|
| 377 |
+ ByteBuffer buffer = ByteBuffer.allocate(bufferSize); |
|
| 378 |
+ int unitRecvCnt = channel.read(buffer); |
|
| 379 |
+ if (unitRecvCnt > 0) {
|
|
| 380 |
+ Packet.mergeBuffers(fileBuffer, buffer, recvFileSize); |
|
| 381 |
+ recvFileSize += unitRecvCnt; |
|
| 382 |
+ saveLog("unitRecvCnt : " + unitRecvCnt);
|
|
| 383 |
+ saveLog("recvFileSize : " + recvFileSize);
|
|
| 384 |
+ } |
|
| 385 |
+ |
|
| 386 |
+ if (recvFileSize == fileSize) {
|
|
| 387 |
+ if (saveFileCount == 0) {
|
|
| 388 |
+ messageDto.setUserFileName01(imagePath + File.separator + fileName); |
|
| 389 |
+ } else if (saveFileCount == 1) {
|
|
| 390 |
+ messageDto.setUserFileName02(imagePath + File.separator + fileName); |
|
| 391 |
+ } else if (saveFileCount == 2) {
|
|
| 392 |
+ messageDto.setUserFileName03(imagePath + File.separator + fileName); |
|
| 393 |
+ } |
|
| 394 |
+ JobFileFactory.saveFileForByteBuffer(imagePath, fileName, fileBuffer); |
|
| 395 |
+ saveFileCount++; // 수신한 파일 카운트 증가 |
|
| 396 |
+ break; |
|
| 397 |
+ } |
|
| 398 |
+ |
|
| 399 |
+ if (System.currentTimeMillis() - IMAGE_RECV_TIME > 3000) {
|
|
| 400 |
+ /* MMS 이미지 파일 수신 timeout */ |
|
| 401 |
+ saveLog(printTaskLog() + "[MMS File : " + fileName + " : Expired ... ... ... ... ... ... ...]"); |
|
| 402 |
+ break; |
|
| 403 |
+ } |
|
| 404 |
+ } |
|
| 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++; // 수신한 파일 카운트 증가 |
|
| 361 | 419 |
} |
| 420 |
+ |
|
| 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 |
+// } |
|
| 362 | 439 |
|
| 363 | 440 |
/* 사용자 단가, 발송망 설정 */ |
| 364 | 441 |
MemberDto savedMemberDto = null; |
... | ... | @@ -564,6 +641,7 @@ |
| 564 | 641 |
} |
| 565 | 642 |
} catch (Exception e) {
|
| 566 | 643 |
resultCode = "10"; |
| 644 |
+ saveLog(e); |
|
| 567 | 645 |
e.printStackTrace(); |
| 568 | 646 |
} |
| 569 | 647 |
|
--- src/main/resources/application-dev.yml
+++ src/main/resources/application-dev.yml
... | ... | @@ -2,10 +2,10 @@ |
| 2 | 2 |
datasource: |
| 3 | 3 |
server: |
| 4 | 4 |
driver-class-name: org.mariadb.jdbc.Driver |
| 5 |
- url: jdbc:mariadb://localhost:3306/mjon |
|
| 6 |
- jdbc-url: jdbc:mariadb://localhost:3306/mjon |
|
| 7 |
- username: root |
|
| 8 |
- password: 1234 |
|
| 5 |
+ url: jdbc:mariadb://192.168.0.60:3303/mjon_agent_server |
|
| 6 |
+ jdbc-url: jdbc:mariadb://192.168.0.60:3303/mjon_agent_server |
|
| 7 |
+ username: mjonUr_agent |
|
| 8 |
+ password: mjagent123$ |
|
| 9 | 9 |
connectionTimeout: 30000 |
| 10 | 10 |
maximumPoolSize: 15 |
| 11 | 11 |
maxLifetime: 1800000 |
... | ... | @@ -22,6 +22,6 @@ |
| 22 | 22 |
# server-property-file: /home/mjon_server_agent/config/server.properties |
| 23 | 23 |
# db-name: mjon_agent_back |
| 24 | 24 |
agent: |
| 25 |
- root-path: /Users/jangdongsin/DevDocs/apps/itn/agent_server |
|
| 26 |
- server-property-file: /Users/jangdongsin/DevDocs/apps/itn/agent_server/config/server.properties |
|
| 25 |
+ root-path: /data/agent/agent_server |
|
| 26 |
+ server-property-file: /data/agent/agent_server/config/server.properties |
|
| 27 | 27 |
db-name: mjon_agent_back(No newline at end of file) |
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?