/// <summary> /// SessionManager 연결 성공 이벤트 /// </summary> /// <param name="sender"></param> private void OnConnect(object sender) { ListItemAdd("통합게이트웨이 연결 성공"); gatewayIPTextBox.Invoke(new MethodInvoker(delegate() { gatewayIPTextBox.Enabled = false; })); gatewayPortTextBox.Invoke(new MethodInvoker(delegate() { gatewayPortTextBox.Enabled = false;; })); authentiCodeTextBox.Invoke(new MethodInvoker(delegate() { authentiCodeTextBox.Enabled = false; })); connectBtn.Invoke(new MethodInvoker(delegate() { connectBtn.Enabled = false; })); disconnectBtn.Invoke(new MethodInvoker(delegate() { disconnectBtn.Enabled = true; })); CreateParsingThread(); #region 접속 인증 요청 //접속 인증 요청 명령 클래스 생성 IEASProtocolBase protocolBase = IEASProtocolManager.CreateProtocol(0x03); //전송 시스템 종류 셋팅 protocolBase.SenderType = IEASSenderType.SAS; //명령 코드에 해당하는 클래스로 캐스팅 IEASPrtCmd3 prt3 = protocolBase as IEASPrtCmd3; //인증 코드 셋팅(32자) string authentiCode = authentiCodeTextBox.Text; prt3.AuthentiCode = authentiCode; //byte[] 형식의 frame 으로 변환 byte[] sendData = IEASProtocolManager.MakeFrame(prt3); //통합게이트웨이로 전송 if (SessionManager.GetInstance().Send(sendData)) { ListItemAdd("접속 인증 요청 전송"); } else { ListItemAdd("접속 인증 요청 전송 실패"); } #endregion }
/// <summary> /// 인증 요청 /// </summary> public bool RequestAuth(string authCode) { bool result = false; try { IEASProtocolBase protoBase = IEASProtocolManager.CreateProtocolForKCAP(KCAPCmdValue.RequestAuth); protoBase.SenderType = IEASSenderType.SWI; IEASPrtCmd3 protoCmd3 = protoBase as IEASPrtCmd3; protoCmd3.AuthentiCode = authCode; byte[] authRequest = IEASProtocolManager.MakeFrameForKCAP(protoCmd3); result = this.sessionManager.SendData(authRequest); } catch (Exception ex) { System.Console.WriteLine("[CommunicationManager] RequestAuth( " + ex.ToString() + " )"); FileLogManager.GetInstance().WriteLog("[CommunicationManager] RequestAuth( Exception=[" + ex.ToString() + "] )"); return(false); } return(result); }
/// <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; } }