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

158 lines
5.6 KiB
Markdown

### 5월 6일자 MainController 소스 ( ConnectCheck ~ )
```JAVA
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);
---
### 기타