コード例 #1
0
        /// <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;
            }
        }
コード例 #2
0
        /// <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);
        }