protected override SaiState GetInitialState(DefenseStrategy strategy) { if (this.RsspEP.DefenseTech == MessageDelayDefenseTech.EC) { var ecStrategy = strategy as EcDefenseStrategy; if (ecStrategy == null) { throw new InvalidCastException("指定的策略无法转换为EcDefenseStrategy。"); } return(new EcDisconnectedState(this, ecStrategy)); } else if (this.RsspEP.DefenseTech == MessageDelayDefenseTech.TTS) { var ttsStrategy = strategy as TtsDefenseStrategy; if (ttsStrategy == null) { throw new InvalidCastException("指定的策略无法转换为TtsDefenseStrategy。"); } return(new TtsDisconnectedState(this, ttsStrategy)); } else { throw new InvalidOperationException("主动方必须指定一个有效的消息延迟防御技术。"); } }
protected virtual void Dispose(bool disposing) { if (!_disposed) { _disposed = true; this.Connected = false; if (disposing) { if (_handshakeTimeoutMgr != null) { _handshakeTimeoutMgr.Dispose(); _handshakeTimeoutMgr = null; } if (_maslConnection != null) { _maslConnection.Dispose(); _maslConnection = null; } if (_defenseStrategy != null) { _defenseStrategy.Dispose(); _defenseStrategy = null; } } } }
/// <summary> /// 初始化防御技术与状态。 /// </summary> private void Initialize() { if (_defenseStrategy != null) { _defenseStrategy.Dispose(); } _defenseStrategy = this.GetDefenseStrategy(); _currentState = this.GetInitialState(_defenseStrategy); _seqNoManager.Initlialize(); }
protected override SaiState GetInitialState(DefenseStrategy strategy) { return(new SaiInvalidState(this)); }
protected abstract SaiState GetInitialState(DefenseStrategy strategy);