Exemple #1
0
        private MaslConnection(IMaslConnectionObserver observer, RsspEndPoint rsspEP)
        {
            _observer     = observer;
            _rsspEndPoint = rsspEP;
            _currentState = this.GetInitialState();

            _macCalculator = new TrippleDesMacCalculator(rsspEP.AuthenticationKeys);
            _auMsgBuilder  = new AuMessageBuilder(rsspEP, _macCalculator);

            _handshakeTimeoutMgr = new HandshakeTimeoutManager(MaslConnection.HandshakeTimeout, this);
        }
Exemple #2
0
        /// <summary>
        /// 处理MASL连接变化事件。
        /// </summary>
        /// <param name="connected">true表示MASL由断到连,false表示MASL由连到断。</param>
        private void OnConnectionChanged(bool connected)
        {
            try
            {
                if (connected)
                {
                    _currentState = new MaslConnectedState(this);

                    _observer.OnMaslConnected();
                }
                else
                {
                    _currentState = this.GetInitialState();

                    _observer.OnMaslDisconnected();

                    _macCalculator.InitRandomNumber();
                }
            }
            catch (System.Exception ex)
            {
                LogUtility.Error(ex.ToString());
            }
        }
Exemple #3
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());
            }
        }
Exemple #4
0
        void IAleConnectionObserver.OnAleDisconnected()
        {
            _currentState = this.GetInitialState();

            this.Connected = false;
        }
Exemple #5
0
        public void Disconnect(MaslErrorCode majorReason, byte minorReason)
        {
            _currentState.Disconnect(majorReason, minorReason);

            _currentState = this.GetInitialState();
        }