Beispiel #1
0
        public void CheckAu1Packet(byte[] au1Bytes)
        {
            var au1Frame = MaslFrame.Parse(au1Bytes, 0, au1Bytes.Length - 1) as MaslAu1Frame;

            if (au1Frame == null)
            {
                throw new Exception("无法将指定的字节流序列化为Au1Frame。");
            }

            if (!ArrayHelper.Equals(au1Frame.RandomB, _macCalc.RandomB))
            {
                throw new Exception(string.Format("Au1消息中的RandomB检验失败,期望值={0},实际值={1}",
                                                  HelperTools.ConvertToString(_macCalc.RandomB),
                                                  HelperTools.ConvertToString(au1Frame.RandomB)));
            }
        }
Beispiel #2
0
        void IAleConnectionObserver.OnAleUserDataArrival(byte[] aleUserData)
        {
            try
            {
                var maslFrame = MaslFrame.Parse(aleUserData, 0, aleUserData.Length - 1);

                if (maslFrame.FrameType == MaslFrameType.AU1)
                {
                    LogUtility.Info(string.Format("{0}: Masl层当前状态{1},处理AU1。",
                                                  _rsspEndPoint.ID, _currentState.GetType().Name));

                    _currentState.HandleAu1Frame(maslFrame as MaslAu1Frame);
                }
                else if (maslFrame.FrameType == MaslFrameType.AU2)
                {
                    LogUtility.Info(string.Format("{0}: Masl层当前状态{1},处理AU2。",
                                                  _rsspEndPoint.ID, _currentState.GetType().Name));

                    _currentState.HandleAu2Frame(maslFrame as MaslAu2Frame);
                }
                else if (maslFrame.FrameType == MaslFrameType.AU3)
                {
                    LogUtility.Info(string.Format("{0}: Masl层当前状态{1},处理AU3。",
                                                  _rsspEndPoint.ID, _currentState.GetType().Name));

                    _currentState.HandleAu3Frame(maslFrame as MaslAu3Frame);
                }
                else if (maslFrame.FrameType == MaslFrameType.AR)
                {
                    LogUtility.Info(string.Format("{0}: Masl层当前状态{1},处理AR。",
                                                  _rsspEndPoint.ID, _currentState.GetType().Name));

                    _currentState.HandleArFrame(maslFrame as MaslArFrame);
                }
                else if (maslFrame.FrameType == MaslFrameType.DT)
                {
                    if (!(_currentState is MaslConnectedState))
                    {
                        LogUtility.Error(string.Format("{0}: Masl层当前状态{1},处理DT。",
                                                       _rsspEndPoint.ID, _currentState.GetType().Name));
                    }

                    _currentState.HandleDtFrame(maslFrame as MaslDtFrame);
                }
                else if (maslFrame.FrameType == MaslFrameType.DI)
                {
                    LogUtility.Info(string.Format("{0}: Masl层当前状态{1},处理DI。",
                                                  _rsspEndPoint.ID, _currentState.GetType().Name));

                    _currentState  = this.GetInitialState();
                    this.Connected = false;

                    //_currentState.HandleDiFrame(maslFrame as MaslDiFrame);
                }
            }
            catch (MaslException ex)
            {
                this.Disconnect(ex.MajorReason, ex.MinorReason);
                LogUtility.Error(ex.ToString());
            }
            catch (Exception ex)
            {
                this.Disconnect(MaslErrorCode.NotDefined, 0);
                LogUtility.Error(ex.ToString());
            }
        }