protected override long CalcEcTimeDelay(SaiEcFrame ecFrame) { var actualRemoteEcValue = ecFrame.EcValue; var delta = (long)_remoteCounter.CurrentValue - (long)actualRemoteEcValue; if (delta > 3) { _state3Count++; } // 如果Delta小于0或者连接5个周期Delta差值在3以上,则执行修正程序。 if (delta < 0) { return(0); } else if (_state3Count > 5) { _remoteCounter.UpdateCurrentValue(actualRemoteEcValue); _state3Count = 0; return(0); } else { return((delta * _remoteCounter.ExcutionCycle) / 10); } }
protected override void HandleEcFrame(SaiEcFrame ecFrame) { if (ecFrame.FrameType == SaiFrameType.EC_Start) { this.Context.RsspEP.DefenseTech = MessageDelayDefenseTech.EC; var strategy = new EcDefenseStrategy(this.Context.RsspEP.LocalID, this.Context.RsspEP.EcInterval); this.Context.DefenseStrategy = strategy; this.Context.CurrentState = new EcWaitingforStart1State(this.Context, strategy); this.Context.CurrentState.HandleFrame(ecFrame); } else { throw new Exception("SaiInvalideState状态时,收到的第一条帧不是ECStart。"); } }
protected override void HandleEcFrame(SaiEcFrame ecFrame) { if (ecFrame.FrameType == SaiFrameType.EC_Start) { this.HandleEcStartFrame(ecFrame as SaiEcFrameStart); } else if (ecFrame.FrameType == SaiFrameType.EC_AppDataAskForAck) { this.HandleEcAskForAckFrame(ecFrame as SaiEcFrameAskForAck); } else if (ecFrame.FrameType == SaiFrameType.EC_AppDataAcknowlegment) { this.HandleEcAcknowlegmentFrame(ecFrame as SaiEcFrameAcknowlegment); } else if (ecFrame.FrameType == SaiFrameType.EC_AppData) { this.HandleEcAppFrame(ecFrame as SaiEcFrameApplication); } else { LogUtility.Error(string.Format("{0}: {1} 中收到非Ec帧。", this.Context.RsspEP.ID, this.GetType().Name)); } }
protected virtual long CalcEcTimeDelay(SaiEcFrame ecFrame) { return(0); }
protected virtual void HandleEcFrame(SaiEcFrame ecFrame) { LogUtility.Error(string.Format("{0}: {1}.{2} not implement!", this.Context.RsspEP.ID, this.GetType().Name, new StackFrame(0).GetMethod().Name.Split('.').Last())); }