/// <summary>
        /// Creates Track Circuits and Track Controllers.  Track Circuits are packaged into Track Controllers,
        /// and Track Controllers are chained off of the 2 'Primaries' (1 for each line) in the environment
        /// </summary>
        /// <param name="trackConBlockLists">Array of lists- 1 list is associated with each Track Circuit</param>
        /// <param name="redLine">A boolean value; true if we're on the red line</param>
        /// <returns>A true or false value, denoting the success of the operation</returns>
        public bool populateTCs(List <IBlock>[] trackConBlockLists, bool redLine)
        {
            if (trackConBlockLists == null)
            {
                return(false);
            }
            for (int i = 0; i < trackConBlockLists.Length; i++)
            {
                if (trackConBlockLists[i].Count != 0)//i is a TrackConID that is loaded
                {
                    TrackController.TrackCircuit tc = new TrackController.TrackCircuit(_env, trackConBlockLists[i]);
                    tc.ID = i;
                    circuits.Add(tc);
                    TrackController.TrackController TC = new TrackController.TrackController(_env, tc);

                    if (redLine)//We're red line, man
                    {
                        //If were the first track controller on this line
                        if (_env.PrimaryTrackControllerRed == null)
                        {
                            _env.PrimaryTrackControllerRed = TC;
                            TC.Previous = null;
                            TC.Next     = null;
                        }
                        else//Add track controller at end of linked list
                        {
                            ITrackController cur = _env.PrimaryTrackControllerRed;
                            while (cur.Next != null)
                            {
                                cur = cur.Next;
                            }
                            cur.Next    = TC;
                            TC.Previous = cur;
                        }
                    }
                    else//We're green line, man.
                    {
                        //If were the first track controller on this line
                        if (_env.PrimaryTrackControllerGreen == null)
                        {
                            _env.PrimaryTrackControllerGreen = TC;
                            TC.Previous = null;
                            TC.Next     = null;
                        }
                        else//Add track controller at end of linked list
                        {
                            ITrackController cur = _env.PrimaryTrackControllerGreen;
                            while (cur.Next != null)
                            {
                                cur = cur.Next;
                            }
                            cur.Next    = TC;
                            TC.Previous = cur;
                        }
                    }
                }
            }

            return(true);
        }
Esempio n. 2
0
        public bool DoTest(out int pass, out int fail, out List <string> messages)
        {
            pass     = 0;
            fail     = 0;
            messages = new List <string>();

            // Create 100 blocks for the red line
            var blocks = new List <IBlock>();

            // First block
            blocks.Add(new Block(1, StateEnum.Healthy, 100, 0, 0, new[] { 0, 0 }, BlockLengh, DirEnum.East, new[] { "" }, 2, 0, 0, "Red", 100));
            // Next 99 blocks
            for (var i = 2; i < 100; i++)
            {
                blocks.Add(new Block(i, StateEnum.Healthy, i - 1, 0, 0, new[] { 0, 0 }, BlockLengh, DirEnum.East, new[] { "" }, i + 1, 0, 0, "Red", 100));
            }
            // Last block
            blocks.Add(new Block(100, StateEnum.Healthy, 99, 0, 0, new[] { 0, 0 }, BlockLengh, DirEnum.East, new[] { "" }, 1, 0, 0, "Red", 100));

            // Environment object
            ISimulationEnvironment environment = new global::SimulationEnvironment.SimulationEnvironment();
            // Our track circuit
            ITrackCircuit currCircuit = new TrackController.TrackCircuit(environment, blocks.Where(x => x.BlockID > 0 && x.BlockID <= 34).ToList());
            // Next track controller's circuit
            ITrackCircuit nextCircuit = new TrackController.TrackCircuit(environment, blocks.Where(x => x.BlockID > 34 && x.BlockID <= 67).ToList());
            // Previous track controller's circuit
            ITrackCircuit prevCircuit = new TrackController.TrackCircuit(environment, blocks.Where(x => x.BlockID > 67 && x.BlockID <= 100).ToList());

            ITrackController prev = new TrackController.TrackController(environment, currCircuit);
            ITrackController curr = new TrackController.TrackController(environment, currCircuit);
            ITrackController next = new TrackController.TrackController(environment, currCircuit);

            prev.Previous = null;
            prev.Next     = curr;

            curr.Previous = prev;
            curr.Next     = next;

            next.Previous = curr;
            next.Next     = null;

            environment.PrimaryTrackControllerGreen = prev;
            environment.PrimaryTrackControllerRed   = prev;
            environment.TrackModel = new DummyTrackModel(blocks);

            _env        = (global::SimulationEnvironment.SimulationEnvironment)environment;
            _startBlock = blocks[0];

            return(DoTestInternal(out pass, out fail, out messages));
        }
        public bool DoTest(out int pass, out int fail, out List<string> messages)
        {
            pass = 0;
            fail = 0;
            messages = new List<string>();

            // Create 100 blocks for the red line
            var blocks = new List<IBlock>();
            // First block
            blocks.Add(new Block(1, StateEnum.Healthy, 100, 0, 0, new[] { 0, 0 }, BlockLengh, DirEnum.East, new[] { "" }, 2, 0, 0, "Red", 100));
            // Next 99 blocks
            for (var i = 2; i < 100; i++)
                blocks.Add(new Block(i, StateEnum.Healthy, i - 1, 0, 0, new[] { 0, 0 }, BlockLengh, DirEnum.East, new[] { "" }, i + 1, 0, 0, "Red", 100));
            // Last block
            blocks.Add(new Block(100, StateEnum.Healthy, 99, 0, 0, new[] { 0, 0 }, BlockLengh, DirEnum.East, new[] { "" }, 1, 0, 0, "Red", 100));

            // Environment object
            ISimulationEnvironment environment = new global::SimulationEnvironment.SimulationEnvironment();
            // Our track circuit
            ITrackCircuit currCircuit = new TrackController.TrackCircuit(environment, blocks.Where(x => x.BlockID > 0 && x.BlockID <= 34).ToList());
            // Next track controller's circuit
            ITrackCircuit nextCircuit = new TrackController.TrackCircuit(environment, blocks.Where(x => x.BlockID > 34 && x.BlockID <= 67).ToList());
            // Previous track controller's circuit
            ITrackCircuit prevCircuit = new TrackController.TrackCircuit(environment, blocks.Where(x => x.BlockID > 67 && x.BlockID <= 100).ToList());

            ITrackController prev = new TrackController.TrackController(environment, currCircuit);
            ITrackController curr = new TrackController.TrackController(environment, currCircuit);
            ITrackController next = new TrackController.TrackController(environment, currCircuit);

            prev.Previous = null;
            prev.Next = curr;

            curr.Previous = prev;
            curr.Next = next;

            next.Previous = curr;
            next.Next = null;

            environment.PrimaryTrackControllerGreen = prev;
            environment.PrimaryTrackControllerRed = prev;
            environment.TrackModel = new DummyTrackModel(blocks);

            _env = (global::SimulationEnvironment.SimulationEnvironment) environment;
            _startBlock = blocks[0];

            return DoTestInternal(out pass, out fail, out messages);
        }
        /// <summary>
        /// Creates Track Circuits and Track Controllers.  Track Circuits are packaged into Track Controllers, 
        /// and Track Controllers are chained off of the 2 'Primaries' (1 for each line) in the environment
        /// </summary>
        /// <param name="trackConBlockLists">Array of lists- 1 list is associated with each Track Circuit</param>
        /// <param name="redLine">A boolean value; true if we're on the red line</param>
        /// <returns>A true or false value, denoting the success of the operation</returns>
        public bool populateTCs(List<IBlock>[] trackConBlockLists, bool redLine)
        {
            if (trackConBlockLists == null)
                return false;
            for (int i = 0; i < trackConBlockLists.Length; i++)
            {
                if (trackConBlockLists[i].Count != 0)//i is a TrackConID that is loaded
                {
                    TrackController.TrackCircuit tc = new TrackController.TrackCircuit(_env,trackConBlockLists[i]);
                    tc.ID = i;
                    circuits.Add(tc);
                    TrackController.TrackController TC = new TrackController.TrackController(_env,tc);

                    if (redLine)//We're red line, man
                    {
                        //If were the first track controller on this line
                        if (_env.PrimaryTrackControllerRed == null)
                        {
                            _env.PrimaryTrackControllerRed = TC;
                            TC.Previous = null;
                            TC.Next = null;
                        }
                        else//Add track controller at end of linked list
                        {
                            ITrackController cur = _env.PrimaryTrackControllerRed;
                            while (cur.Next != null)
                                cur = cur.Next;
                            cur.Next = TC;
                            TC.Previous = cur;
                        }
                    }
                    else//We're green line, man.
                    {
                        //If were the first track controller on this line
                        if (_env.PrimaryTrackControllerGreen == null)
                        {
                            _env.PrimaryTrackControllerGreen = TC;
                            TC.Previous = null;
                            TC.Next = null;
                        }
                        else//Add track controller at end of linked list
                        {
                            ITrackController cur = _env.PrimaryTrackControllerGreen;
                            while (cur.Next != null)
                                cur = cur.Next;
                            cur.Next = TC;
                            TC.Previous = cur;
                        }
                    }

                }
            }

            return true;
        }