Example #1
0
 /// <summary>
 /// Resets current report
 /// </summary>
 public void Reset()
 {
     // prevent overwrites
     lock (timeoutTimer)
     {
         this.recentReport = null;
         this.timeoutTimer.Stop();
         this.timeoutTimer.Reset();
     }
 }
Example #2
0
        /// <summary>
        /// sets the current blockage report
        /// </summary>
        /// <param name="tbr"></param>
        public void OnBlockageReport(TrajectoryBlockedReport tbr)
        {
            // set the report
            this.recentReport = tbr;

            // output
            ArbiterOutput.Output("Blockage report: Behavior: " + tbr.BehaviorType.ToString() + ", Type: " + tbr.BlockageType.ToString() + ", Dist: " + tbr.DistanceToBlockage.ToString("f2") + ", Result: " + tbr.Result.ToString() + ", Reverse Rec: " + tbr.ReverseRecommended.ToString() + ", Saudi: " + tbr.SAUDILevel.ToString() + ", Track: " + tbr.TrackID.ToString() + "\n");

            // lock the timer
            lock (timeoutTimer)
            {
                this.timeoutTimer.Stop();
                this.timeoutTimer.Reset();
                this.timeoutTimer.Start();
            }
        }
Example #3
0
        /// <summary>
        /// Updates the blockage component
        /// </summary>
        public List <ITacticalBlockage> DetermineBlockages(IState currentState)
        {
            // check for a timeout or cooldown
            if (timeoutTimer.ElapsedMilliseconds / 1000.0 > 0.5 ||
                (cooldownTimer.IsRunning && cooldownTimer.ElapsedMilliseconds < cooldownMaxValue))
            {
                // reset all if recent blockage timed out
                this.Reset();
            }
            // check cooldown timer expired
            else if (cooldownTimer.IsRunning && cooldownTimer.ElapsedMilliseconds > cooldownMaxValue)
            {
                cooldownTimer.Stop();
                cooldownTimer.Reset();
                cooldownMaxValue = 0.0;
            }

            // set the report to use for this
            TrajectoryBlockedReport tbr = this.recentReport;

            // check if we still have a blockage report
            if (tbr != null)
            {
                // check type of state is stay in lane or stay in supra lane
                if (currentState is StayInLaneState || currentState is StayInSupraLaneState)
                {
                    // check type of completion report matches current state
                    if (tbr.BehaviorType == (new StayInLaneBehavior(null, null, null)).GetType() ||
                        tbr.BehaviorType == (new SupraLaneBehavior(null, null, 0, 0, 0, null, null, 0, 0, 0, null, null, null)).GetType())
                    {
                        // create the lane blockage
                        LaneBlockage lb = new LaneBlockage(tbr);
                        CoreCommon.CurrentInformation.Blockage = lb.ToString();

                        // return the blockage
                        return(new List <ITacticalBlockage>(new ITacticalBlockage[] { lb }));
                    }
                }
                // check if we're in a turn state
                else if (currentState is TurnState)
                {
                    // check type of completion report matches current state
                    if (tbr.BehaviorType == (new TurnBehavior(null, null, null, null, null, null)).GetType())
                    {
                        // create a new turn blockage
                        TurnBlockage tb = new TurnBlockage(tbr);
                        CoreCommon.CurrentInformation.Blockage = tb.ToString();

                        // return the blockage
                        return(new List <ITacticalBlockage>(new ITacticalBlockage[] { tb }));
                    }
                }
                // check if we're changing lanes
                else if (currentState is ChangeLanesState)
                {
                    // check type of completion report matches current state
                    if (tbr.BehaviorType == (new ChangeLaneBehavior(null, null, false, 0.0, null, null)).GetType())
                    {
                        // create a new turn blockage
                        LaneChangeBlockage lcb = new LaneChangeBlockage(tbr);
                        CoreCommon.CurrentInformation.Blockage = lcb.ToString();

                        // return the blockage
                        return(new List <ITacticalBlockage>(new ITacticalBlockage[] { lcb }));
                    }
                }
                // check if we are recovering from a blockage
                else if (currentState is BlockageRecoveryState)
                {
                    // check type
                    if (((BlockageRecoveryState)currentState).RecoveryBehavior != null &&
                        tbr.BehaviorType == ((BlockageRecoveryState)currentState).RecoveryBehavior.GetType())
                    {
                        // create a new blockage recovery blockage
                        BlockageRecoveryBlockage brb = new BlockageRecoveryBlockage(tbr);
                        CoreCommon.CurrentInformation.Blockage = brb.ToString();
                        ((BlockageRecoveryState)currentState).RecoveryStatus = BlockageRecoverySTATUS.BLOCKED;

                        // return the blockage
                        return(new List <ITacticalBlockage>(new ITacticalBlockage[] { brb }));
                    }
                }
                // check if we are in an opposing lane
                else if (currentState is OpposingLanesState)
                {
                    // create a new blockage recovery blockage
                    OpposingLaneBlockage olb = new OpposingLaneBlockage(tbr);
                    CoreCommon.CurrentInformation.Blockage = olb.ToString();

                    // return the blockage
                    return(new List <ITacticalBlockage>(new ITacticalBlockage[] { olb }));
                }
            }

            // fall out returns empty list of blockages
            return(new List <ITacticalBlockage>());
        }
Example #4
0
 /// <summary>
 /// Constructor
 /// </summary>
 public BlockageHandler()
 {
     this.recentReport = null;
     this.timeoutTimer = new Stopwatch();
     cooldownTimer     = new Stopwatch();
 }
Example #5
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="blockageReport"></param>
 public OpposingLaneBlockage(TrajectoryBlockedReport blockageReport)
 {
     this.blockageReport = blockageReport;
 }
Example #6
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="blockageReport"></param>
 public BlockageRecoveryBlockage(TrajectoryBlockedReport blockageReport)
 {
     this.blockageReport = blockageReport;
 }
Example #7
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="blockageReport"></param>
 public TurnBlockage(TrajectoryBlockedReport blockageReport)
 {
     this.blockageReport = blockageReport;
 }
Example #8
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="blockageReport"></param>
 public LaneChangeBlockage(TrajectoryBlockedReport blockageReport)
 {
     this.blockageReport = blockageReport;
 }