/// <summary> /// 파싱된 프로토콜 처리 /// </summary> /// <param name="prtBase"></param> private void ProtocolProcessing(IEASProtocolBase prtBase) { switch (prtBase.CMD) { case 0x01: { IEASPrtCmd1 prt1 = prtBase as IEASPrtCmd1; ListItemAdd("발령 CAP 메시지 수신 - CAP 메시지 : " + prt1.CAPMessage); MessageBox.Show(prt1.CAPMessage, "CAP 메시지 수신", MessageBoxButtons.OK); #region 응답 CAP 메시지 전송 //발령 응답 명령 클래스 생성 IEASProtocolBase protocolBase = IEASProtocolManager.CreateProtocol(0x02); //전송 시스템 종류 셋팅 protocolBase.SenderType = IEASSenderType.SAS; //명령 코드에 해당하는 클래스로 캐스팅 IEASPrtCmd2 prt2 = protocolBase as IEASPrtCmd2; //응답 CAP 메시지 셋팅 string path = System.Environment.CurrentDirectory + @"\" + ackCAPMessageSampleFileName; prt2.CAPMessage = File.ReadAllText(path); //byte[] 형식의 frame 으로 변환 byte[] sendData = IEASProtocolManager.MakeFrame(prt2); //frame 전송 if (SessionManager.GetInstance().Send(sendData)) { ListItemAdd("응답 CAP 메시지 전송"); } else { ListItemAdd("응답 CAP 메시지 전송 실패"); } #endregion } break; case 0x02: { IEASPrtCmd2 prt2 = prtBase as IEASPrtCmd2; ListItemAdd("응답 CAP 메시지 수신 - CAP 메시지 : " + prt2.CAPMessage); } break; case 0x03: { IEASPrtCmd3 prt3 = prtBase as IEASPrtCmd3; ListItemAdd("접속 인증 요청 명령 수신 - 인증코드 : " + prt3.AuthentiCode); } break; case 0x04: { IEASPrtCmd4 prt4 = prtBase as IEASPrtCmd4; if (prt4.AuthentiResult == 1) { ListItemAdd("접속 인증 결과 수신 - 접속승인"); CreatePollingThread(); } else { ListItemAdd("접속 인증 결과 수신 - 접속거부"); } } break; case 0xFF: { ListItemAdd("폴링 데이터 수신"); } break; default: { ListItemAdd("Parsing 결과 - 지원하지 않는 명령어 코드 입니다"); } break; } }
/// <summary> /// 큐에 저장된 패킷 데이터를 프레임 단위로 파싱. /// </summary> private int DistributeKCAPCommandData(KCAPCmdValue command, IEASProtocolBase baseData) { try { System.Console.WriteLine("[CommunicationManager] KCAP 프레임 데이터 분배 - command(" + command + ")"); switch (command) { case KCAPCmdValue.OrderResponse: { IEASPrtCmd2 protoCmd2 = baseData as IEASPrtCmd2; if (this.NotifyCAPReceived != null) { CAP capMsg = new CAP(protoCmd2.CAPMessage); SenderTypes senderType = ConvertToLocalSenderType(protoCmd2.SenderType); ReceivedCAPInfo capInfo = new ReceivedCAPInfo(senderType, capMsg); this.NotifyCAPReceived(this, new CapEventArgs(capInfo)); } } break; case KCAPCmdValue.AuthResult: { IEASPrtCmd4 protoCmd4 = baseData as IEASPrtCmd4; if (this.NotifyIAGWConnectionState != null) { if (protoCmd4.SenderType == IEASSenderType.IAGW) { bool authResult = (protoCmd4.AuthentiResult == 0x01) ? true : false; IAGWConnectionEventArgs copy = new IAGWConnectionEventArgs(); lock (this.currentIAGWConnectionState) { this.currentIAGWConnectionState.IsAuthenticated = authResult; copy.DeepCopyFrom(this.currentIAGWConnectionState); } this.NotifyIAGWConnectionState(this, copy); } else { // 메시지 유효성 오류: 무시 } } } break; case KCAPCmdValue.Order: { IEASPrtCmd1 protoCmd1 = baseData as IEASPrtCmd1; if (this.NotifyCAPReceived != null) { CAP capMsg = new CAP(protoCmd1.CAPMessage); SenderTypes senderType = ConvertToLocalSenderType(protoCmd1.SenderType); ReceivedCAPInfo capInfo = new ReceivedCAPInfo(senderType, capMsg); this.NotifyCAPReceived(this, new CapEventArgs(capInfo)); } } break; case KCAPCmdValue.Polling: default: { // do nothing } break; } } catch (Exception ex) { System.Console.WriteLine("[CommunicationManager] DistributeKCAPCommandData( " + ex.ToString() + " )"); FileLogManager.GetInstance().WriteLog("[CommunicationManager] DistributeKCAPCommandData( Exception=[" + ex.ToString() + "] )"); return(-99); } return(0); }