Exemplo n.º 1
0
        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);
            }
        }
Exemplo n.º 2
0
        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。");
            }
        }
Exemplo n.º 3
0
 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));
     }
 }
Exemplo n.º 4
0
 protected virtual long CalcEcTimeDelay(SaiEcFrame ecFrame)
 {
     return(0);
 }
Exemplo n.º 5
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()));
 }