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); }
/// <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()); } }
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()); } }
void IAleConnectionObserver.OnAleDisconnected() { _currentState = this.GetInitialState(); this.Connected = false; }
public void Disconnect(MaslErrorCode majorReason, byte minorReason) { _currentState.Disconnect(majorReason, minorReason); _currentState = this.GetInitialState(); }