Obsidian/Recognition/Work Related/1.업무메모/2022.05/2022-05-10.md

5.6 KiB

5월 6일자 MainController 소스 ( ConnectCheck ~ )


				
				if (ConnectCheck()) {
					int queueSize = sendQue.size();
					boolean swich = true;
					boolean swich2 = true;
					if (queueSize != 0) {
						
						MsgObjVO msg = new MsgObjVO();
						String sGetMsg = "";
						
						for (int z = 0; z < queueSize; z++) {
							
							if (msgId == 11) {
								
								sGetMsg = sendQue.poll();
								
								/* 동일 메시지의 이전 패킷이 성공 수신 되었다면 나머지는 전송안함(skip) */
								String sKey = null;
								Set<Entry<String, ArrayList<String>>> entrySet = packetMap.entrySet();
								
								// 요청Que의 패킷으로 packetMap key값 검색
								for (Entry<String, ArrayList<String>> entry : entrySet) {
									if (entry.getValue().get(0).equals(sGetMsg)) {
										sKey = entry.getKey();
										
										// 성공 Count가 있으면 스킵
										if (Integer.parseInt(packetMap.get(sKey).get(5)) > 0) {
											
											GmtLogManager.getInstance().writeLevelLog("[MainController.send] - Cancel remaining packets " + sGetMsg, LogLevelType.LOG_INFO, "SendPacket");
											continue;
											
										}
									}
								}
								
								/* 요청하기 직전 해당시점에 선박이 입항되어 있으면 (skip) */
								int slot_no = Integer.parseInt(sGetMsg.split(",")[10]);
								ShipInfoVO ship = scheduleManager.getShipInfo().get(slot_no);
								if(ship.getInout_part().equals("I")) {
									// 입항한 선박에 대한 모든 요청 패킷 취소
									for (Entry<String, ArrayList<String>> entry : entrySet) {
										if (entry.getValue().get(0).split(",")[10].equals(slot_no)) {
											sKey = entry.getKey();
											
											GmtLogManager.getInstance().writeLevelLog("[MainController.send] - Cancel 입항한 선박 " + sGetMsg, LogLevelType.LOG_INFO, "SendPacket");
											continue;
										}
									}
								}
									
								
								/* 요청하기 직전 해당시점에 직전 30분 내에 자동 수신되었다면 (skip) */
								List<LastLcTrackVO> lcVoList = new ArrayList<LastLcTrackVO>();
								int iMin = 30 ;
								try {
									// 30분, 60분 동안 위치 수신이 없는 선박목록(최종위치테이블)
									LastLcTrackVO ltVO = new LastLcTrackVO();
									ltVO.setMin(iMin);
									lcVoList = passivlcService.selectLastLcList(ltVO);
								} catch (SQLException se) {
									GmtLogManager.getInstance().writeLevelLog("[CheckLastLcController] CheckLastLc - selectLastLcList : " + se.getMessage(), LogLevelType.LOG_ERROR, "AllLog");
								} catch (Exception e) {
									GmtLogManager.getInstance().writeLevelLog("[CheckLastLcController] CheckLastLc - selectLastLcList : " + e.getMessage(), LogLevelType.LOG_ERROR, "AllLog");
								}
								
								if(lcVoList.isEmpty()) {
									GmtLogManager.getInstance().writeLevelLog("[MainController.send] - 30분 이내 자동 위치 수신선박 " + sGetMsg, LogLevelType.LOG_INFO, "SendPacket");
									continue;
									
								}
								

								/* 수동위치보고인경우 "§"마다 Sleep(22.05월 수정) */
								if (sGetMsg.startsWith("§")) {
									Thread.sleep(sleepThread);
									
									// 전송해야 할 패킷에 Sleep 구분자 제거
									sGetMsg = sGetMsg.substring(1);
								}
								
								
							}else {
								
								
								if(sendQue.peek().substring(10,15).substring(2, 3).equals("0")) {
								// 인천
								}else if(sendQue.peek().substring(10,15).substring(2, 3).equals("1")) {
								// 포항
									if(swich) {
										Thread.sleep(sleepThread);
										swich = false;
									}
								}else if(sendQue.peek().substring(10,15).substring(2, 3).equals("2")) {
								// 고흥
									if(swich2) {
										Thread.sleep(sleepThread);
										swich2 = false;
									}
								}
								
								sGetMsg = sendQue.poll();
								
							}
							
							
							msg.setMsg(sGetMsg.getBytes("EUC-KR"));
							
							GmtLogManager.getInstance().writeLevelLog(sGetMsg, LogLevelType.LOG_INFO, "SendPacket");
							
							// 패킷 전송
							sendClient(clientInfoList.get(0).getIp(), clientInfoList.get(0).getPort(), msg);
							cnt++;
							// 메시지간 10milliSec 텀
							Thread.sleep(10);
						}
						GmtLogManager.getInstance().writeLevelLog(
								"[MainController.send] - Send " + sender + " [ SUCCESS CNT : " + cnt + " ] ", LogLevelType.LOG_INFO, "SendPacket");
						
						// 메세지 송신 횟수 == 현재 반복횟수가 동일 할 시 sleep 수정
						if((msgSndCnt-1) == repeat) {
							Thread.sleep(msgTerm);
						}else {
							Thread.sleep(sleepThread);
						}
					}
					
					
					
				} else {
					int queueSize = sendQue.size();
					if (queueSize != 0) {
						GmtLogManager.getInstance().writeLevelLog("[MainController.send " + sender + "(No clients connected)]", LogLevelType.LOG_INFO, "FailPacket");
						for (int z = 0; z < queueSize; z++) {
							GmtLogManager.getInstance().writeLevelLog(sendQue.poll(), LogLevelType.LOG_ERROR, "FailPacket");
							cnt++;
						}
						GmtLogManager.getInstance().writeLevelLog(
								"[MainController.send(No clients connected)] - Send " + sender + " Log [ FAIL CNT : " + cnt + " ] ", LogLevelType.LOG_ERROR, "FailPacket");
					}
				}
			}
		} catch (Exception e) {
			GmtLogManager.getInstance().writeLevelLog("[MainController.send] " + e.getMessage(), LogLevelType.LOG_ERROR, "FailPacket");
			e.printStackTrace();
		}
	}
	

int slot_no = Integer.parseInt(sGetMsg.split(",")[10]); ShipInfoVO ship = scheduleManager.getShipInfo().get(slot_no);


기타