Example #1
0
        private void UpdateTruck(UITowTruck truck, bool hasTruckChanged, bool isTruckNew)
        {
            if (isTruckNew)
            {
                towTrucks.Add(truck);

                //Notify clients about new truck
                GetClients().addOrUpdateTruck(truck);
            }
            else
            {
                if (hasTruckChanged)
                {
                    Util.WriteToLog("HUB: Truck " + truck.TruckNumber + " changed ");

                    truck.LastUpdate = 0;
                    //Notify clients about an existing truck only if truck has "changed"
                    GetClients().addOrUpdateTruck(truck);
                }
                else
                {
                    Util.WriteToLog("HUB: NO CHANGES TO " + truck.TruckNumber);

                    truck.LastUpdate += Convert.ToInt32(ConfigurationManager.AppSettings["UpdateIntervalInMilliseconds"]) / 1000;

                    //Notify clients about an existing truck only if truck has "changed"
                    GetClients().updateLastUpdateTime(truck.TruckNumber, truck.LastUpdate, truck.LastMessage);
                }
            }
        }
Example #2
0
        private int CleanupTruckList(int iTruckDeleteCount, TowTruckData[] serviceTowTrucks)
        {
            for (int i = 0; i < towTrucks.Count(); i++)
            {
                try
                {
                    UITowTruck uiTowTruck = towTrucks[i];

                    if (!serviceTowTrucks.Any(p => p.TruckNumber == uiTowTruck.TruckNumber.ToString()))
                    {
                        iTruckDeleteCount += 1;
                        uiTowTruck.Old     = true;
                        //this ui tow truck is not in service any more. so remove it
                        //towTrucks2.Remove(uiTowTruck);

                        //Hub notification
                        GetClients().deleteTruck(uiTowTruck.TruckNumber);
                    }
                }
                catch (Exception ex)
                {
                    Util.WriteToLog(ex.Message);
                }
            }
            towTrucks.RemoveAll(p => p.Old == true);
            return(iTruckDeleteCount);
        }
Example #3
0
        private bool HasTruckChanged(ref UITowTruck truck, TowTruckData serviceTowTruck)
        {
            var returnValue = false;

            if (truck.Lat != serviceTowTruck.Lat)
            {
                returnValue = true;
            }

            if (truck.Lon != serviceTowTruck.Lon)
            {
                returnValue = true;
            }

            if (truck.Speed != serviceTowTruck.Speed)
            {
                returnValue = true;
            }

            if (truck.Heading != serviceTowTruck.Heading)
            {
                returnValue = true;
            }

            if (truck.Heading != serviceTowTruck.Heading)
            {
                returnValue = true;
            }

            if (truck.BeatNumber != serviceTowTruck.BeatNumber.ToString())
            {
                returnValue = true;
            }

            if (truck.LastMessage != serviceTowTruck.LastMessage.ToString())
            {
                returnValue = true;
            }

            if (truck.DriverName != serviceTowTruck.DriverName.ToString())
            {
                returnValue = true;
            }

            if (truck.ContractorName != serviceTowTruck.ContractorName.ToString())
            {
                returnValue = true;
            }

            if (truck.Location != serviceTowTruck.Location.ToString())
            {
                returnValue = true;
            }

            return(returnValue);
        }
Example #4
0
        public void UpdateAllTrucks()
        {
            UITowTruck truck = null;
            int        iTruckUpdatesCount = 0;
            int        iTruckDeleteCount  = 0;

            try
            {
                TowTruckData[] serviceTowTrucks = GetAllTrucksInService();

                var hasTruckChanged = false;
                var isTruckNew      = false;

                lock (towTrucks)
                {
                    for (int i = 0; i < serviceTowTrucks.Length; i++)
                    {
                        try
                        {
                            TowTruckData serviceTowTruck = serviceTowTrucks[i];

                            if (towTrucks.Any(p => p.TruckNumber.ToString() == serviceTowTruck.TruckNumber))
                            {
                                truck           = towTrucks.Single(p => p.TruckNumber == serviceTowTruck.TruckNumber);
                                hasTruckChanged = HasTruckChanged(ref truck, serviceTowTruck);
                            }
                            else
                            {
                                //new tow truck
                                iTruckUpdatesCount += 1;
                                truck            = new UITowTruck();
                                truck.LastUpdate = 0;
                                truck.Old        = false;

                                isTruckNew      = true;
                                hasTruckChanged = true;
                            }

                            #region Set Truck Properties

                            truck.TruckNumber       = serviceTowTruck.TruckNumber == null ? "Not set" : serviceTowTruck.TruckNumber;
                            truck.BeatNumber        = serviceTowTruck.BeatNumber == null ? "Not set" : serviceTowTruck.BeatNumber;
                            truck.BeatSegmentNumber = "Not set";

                            truck.Speed       = serviceTowTruck.Speed;
                            truck.Lat         = serviceTowTruck.Lat;
                            truck.Lon         = serviceTowTruck.Lon;
                            truck.Heading     = serviceTowTruck.Heading;
                            truck.LastMessage = serviceTowTruck.LastMessage.ToString();

                            truck.DriverName     = serviceTowTruck.DriverName;
                            truck.ContractorName = serviceTowTruck.ContractorName;
                            truck.Location       = serviceTowTruck.Location;

                            #region State

                            truck.VehicleState = serviceTowTruck.VehicleState;

                            if (serviceTowTruck.VehicleState == "Waiting for Driver Login")
                            {
                                truck.VehicleStateIconUrl = "NIS.png";
                            }
                            else if (serviceTowTruck.VehicleState == "Driver Logged On")
                            {
                                truck.VehicleStateIconUrl = "InService.png";
                            }
                            else if (serviceTowTruck.VehicleState == "On Patrol")
                            {
                                truck.VehicleStateIconUrl = "InService.png";
                            }
                            else if (serviceTowTruck.VehicleState == "On Assist")
                            {
                                truck.VehicleStateIconUrl = "OnAssist.png";
                            }
                            else if (serviceTowTruck.VehicleState == "On Break")
                            {
                                truck.VehicleStateIconUrl = "OnBreak.png";
                            }
                            else if (serviceTowTruck.Alarms)
                            {
                                if (serviceTowTruck.SpeedingAlarm)
                                {
                                    truck.VehicleStateIconUrl = "MajorAlarm.png";
                                }
                                else if (serviceTowTruck.OutOfBoundsAlarm)
                                {
                                    truck.VehicleStateIconUrl = "MajorAlarm.png";
                                }
                            }

                            else
                            {
                                truck.VehicleStateIconUrl = "OCTA.png";
                            }
                            #endregion

                            #endregion

                            UpdateTruck(truck, hasTruckChanged, isTruckNew);
                        }
                        catch (Exception ex)
                        {
                            Util.WriteToLog(ex.Message);
                        }
                    }

                    iTruckDeleteCount = CleanupTruckList(iTruckDeleteCount, serviceTowTrucks);

                    Util.WriteToLog(DateTime.Now + "================Server: Total Number of trucks in local list: " + towTrucks.Count());
                    Util.WriteToLog(DateTime.Now + "================Server: Total Number of trucks updated: " + iTruckUpdatesCount);
                    Util.WriteToLog(DateTime.Now + "================Server: Total Number of trucks deleted: " + iTruckDeleteCount);
                }
            }
            catch (Exception ex)
            {
                Util.WriteToLog(ex.Message);
            }
        }
Example #5
0
        void UpdateAllTrucks()
        {
            UITowTruck truck = null;


            int iTruckUpdatesCount = 0;
            int iTruckDeleteCount  = 0;

            try
            {
                Util.WriteToLog(DateTime.Now + " Contacting Service");

                TowTruckServiceRef.TowTruckServiceClient service = new TowTruckServiceRef.TowTruckServiceClient();
                TowTruckData[] serviceTowTrucks = service.CurrentTrucks();
                Util.WriteToLog(DateTime.Now + " " + serviceTowTrucks.Count() + " tow trucks retrieved from Service");

                Boolean addTruck        = false;
                Boolean truckHasChanged = false;

                lock (towTrucks)
                {
                    for (int i = 0; i < serviceTowTrucks.Length; i++)
                    {
                        try
                        {
                            TowTruckData serviceTowTruck = serviceTowTrucks[i];


                            //check if this tow truck already exist in list
                            if (towTrucks.Any(p => p.TruckNumber.ToString() == serviceTowTruck.TruckNumber))
                            {
                                truck               = towTrucks.Single(p => p.TruckNumber == serviceTowTruck.TruckNumber);
                                addTruck            = false;
                                iTruckUpdatesCount += 1;

                                if (truck.Lat != serviceTowTruck.Lat)
                                {
                                    truckHasChanged = true;
                                }

                                if (truck.Lon != serviceTowTruck.Lon)
                                {
                                    truckHasChanged = true;
                                }

                                if (truck.Speed != serviceTowTruck.Speed)
                                {
                                    truckHasChanged = true;
                                }

                                if (truck.Heading != serviceTowTruck.Heading)
                                {
                                    truckHasChanged = true;
                                }

                                if (truck.Heading != serviceTowTruck.Heading)
                                {
                                    truckHasChanged = true;
                                }

                                if (truck.BeatNumber != serviceTowTruck.BeatNumber.ToString())
                                {
                                    truckHasChanged = true;
                                }

                                if (truck.LastMessage != serviceTowTruck.LastMessage.ToString())
                                {
                                    truckHasChanged = true;
                                }

                                if (truck.DriverName != serviceTowTruck.DriverName.ToString())
                                {
                                    truckHasChanged = true;
                                }

                                if (truck.ContractorName != serviceTowTruck.ContractorName.ToString())
                                {
                                    truckHasChanged = true;
                                }

                                if (truck.Location != serviceTowTruck.Location.ToString())
                                {
                                    truckHasChanged = true;
                                }
                            }
                            else
                            {
                                //new tow truck
                                iTruckUpdatesCount += 1;
                                truck            = new UITowTruck();
                                truck.LastUpdate = 0;
                                truck.Old        = false;
                                addTruck         = true;
                            }

                            truck.TruckNumber       = serviceTowTruck.TruckNumber == null ? "Not set" : serviceTowTruck.TruckNumber;
                            truck.BeatNumber        = serviceTowTruck.BeatNumber == null ? "Not set" : serviceTowTruck.BeatNumber;
                            truck.BeatSegmentNumber = "Not set";

                            truck.Speed       = serviceTowTruck.Speed;
                            truck.Lat         = serviceTowTruck.Lat;
                            truck.Lon         = serviceTowTruck.Lon;
                            truck.Heading     = serviceTowTruck.Heading;
                            truck.LastMessage = serviceTowTruck.LastMessage.ToString();

                            truck.DriverName     = serviceTowTruck.DriverName;
                            truck.ContractorName = serviceTowTruck.ContractorName;
                            truck.Location       = serviceTowTruck.Location;


                            #region State

                            truck.VehicleState = serviceTowTruck.VehicleState;

                            if (serviceTowTruck.VehicleState == "Waiting for Driver Login")
                            {
                                truck.VehicleStateIconUrl = "NIS.png";
                            }
                            else if (serviceTowTruck.VehicleState == "Driver Logged On")
                            {
                                truck.VehicleStateIconUrl = "InService.png";
                            }
                            else if (serviceTowTruck.VehicleState == "On Patrol")
                            {
                                truck.VehicleStateIconUrl = "InService.png";
                            }
                            else if (serviceTowTruck.VehicleState == "On Assist")
                            {
                                truck.VehicleStateIconUrl = "OnAssist.png";
                            }
                            else if (serviceTowTruck.VehicleState == "On Break")
                            {
                                truck.VehicleStateIconUrl = "OnBreak.png";
                            }
                            else if (serviceTowTruck.Alarms)
                            {
                                if (serviceTowTruck.SpeedingAlarm)
                                {
                                    truck.VehicleStateIconUrl = "MajorAlarm.png";
                                }
                                else if (serviceTowTruck.OutOfBoundsAlarm)
                                {
                                    truck.VehicleStateIconUrl = "MajorAlarm.png";
                                }
                            }

                            else
                            {
                                truck.VehicleStateIconUrl = "OCTA.png";
                            }
                            #endregion


                            if (addTruck)
                            {
                                towTrucks.Add(truck);

                                //Notify clients about new truck
                                Hub.Clients.addOrUpdateTruck(truck);
                            }
                            else
                            {
                                if (truckHasChanged)
                                {
                                    Util.WriteToLog("HUB: Truck " + truck.TruckNumber + " changed ");

                                    truck.LastUpdate = 0;
                                    //Notify clients about an existing truck only if truck has "changed"
                                    Hub.Clients.addOrUpdateTruck(truck);
                                }
                                else
                                {
                                    Util.WriteToLog("HUB: NO CHANGES TO " + truck.TruckNumber);

                                    truck.LastUpdate += Convert.ToInt32(ConfigurationManager.AppSettings["UpdateIntervalInMilliseconds"]) / 1000;

                                    //Notify clients about an existing truck only if truck has "changed"
                                    Hub.Clients.updateLastUpdateTime(truck.TruckNumber, truck.LastUpdate, truck.LastMessage);
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            Util.WriteToLog(ex.Message);
                        }
                    }


                    #region remove

                    try
                    {
                        for (int i = 0; i < towTrucks.Count(); i++)
                        {
                            try
                            {
                                UITowTruck uiTowTruck = towTrucks[i];

                                if (!serviceTowTrucks.Any(p => p.TruckNumber == uiTowTruck.TruckNumber.ToString()))
                                {
                                    iTruckDeleteCount += 1;
                                    uiTowTruck.Old     = true;
                                    //this ui tow truck is not in service any more. so remove it
                                    //towTrucks2.Remove(uiTowTruck);

                                    //Hub notification
                                    Hub.Clients.deleteTruck(uiTowTruck.TruckNumber);
                                }
                            }
                            catch (Exception ex)
                            {
                                Util.WriteToLog(ex.Message);
                            }
                        }
                        towTrucks.RemoveAll(p => p.Old == true);
                    }
                    catch (Exception ex)
                    {
                        Util.WriteToLog(ex.Message);
                    }



                    #endregion

                    Util.WriteToLog(DateTime.Now + "================Server: Total Number of trucks in local list: " + towTrucks.Count());
                    Util.WriteToLog(DateTime.Now + "================Server: Total Number of trucks updated: " + iTruckUpdatesCount);
                    Util.WriteToLog(DateTime.Now + "================Server: Total Number of trucks deleted: " + iTruckDeleteCount);
                }
            }
            catch (Exception ex)
            {
                Util.WriteToLog(ex.Message);
            }
        }
Example #6
0
        void RunDemo()
        {
            try
            {
                Random ran = new Random();
                int    iTruckUpdatesCount = 0;
                int    iTruckDeleteCount  = 0;

                lock (towTrucks)
                {
                    int NewTruckId = ran.Next(1, 15);

                    if (towTrucks.Any(p => p.TruckNumber == NewTruckId.ToString()))
                    {
                        #region update
                        UITowTruck truck = towTrucks.Single(p => p.TruckNumber == NewTruckId.ToString());
                        truck.Speed = ran.NextDouble() * 100;
                        //add a degree to heading
                        truck.Heading     = truck.Heading + 10;
                        truck.LastUpdate += ran.Next(0, 20);

                        iTruckUpdatesCount += 1;

                        truck.Lat = truck.Lat + ran.Next(0, 1000) / 1000;
                        truck.Lon = truck.Lon + ran.Next(0, 1000) / 1000;

                        if (truck.Lat < 33.6539 || truck.Lat > 33.7939)
                        {
                            truck.Lat = 33.7319;
                        }

                        if (truck.Lon < -117.9597 || truck.Lon > -117.6597)
                        {
                            truck.Lon = -117.7927;
                        }

                        // Notify the connected clients
                        Hub.Clients.addOrUpdateTruck(truck);

                        System.Diagnostics.Debug.WriteLine(DateTime.Now + " HUB: Updating Truck " + truck.TruckNumber);

                        #endregion
                    }
                    else
                    {
                        #region add

                        iTruckUpdatesCount += 1;

                        UITowTruck truck = new UITowTruck();
                        truck.Old                 = false;
                        truck.TruckNumber         = NewTruckId.ToString();
                        truck.VehicleStateIconUrl = "NIS.png";
                        truck.VehicleState        = "Waiting for Driver to Login in";
                        truck.Heading             = 20;
                        truck.BeatNumber          = ran.Next().ToString();
                        truck.BeatSegmentNumber   = ran.Next().ToString();
                        truck.ContractorId        = 1;
                        truck.Lat                 = 33.7319 + ran.Next(0, 1000) / 1000;
                        truck.Lon                 = -117.7927 + ran.Next(0, 1000) / 1000;
                        truck.Speed               = 25;
                        truck.LastUpdate          = 0;

                        towTrucks.Add(truck);

                        // Notify the connected clients
                        Hub.Clients.addOrUpdateTruck(truck);

                        System.Diagnostics.Debug.WriteLine(DateTime.Now + " HUB: Adding Truck " + truck.TruckNumber);

                        #endregion
                    }


                    #region remove

                    var removeItem = false;

                    //removeItem = NewId % 2 == 0;
                    removeItem = iCounter % 20 == 0;

                    if (removeItem)
                    {
                        UITowTruck truck = towTrucks.FirstOrDefault();
                        truck.Old = true;
                        //towTrucks2.Remove(truck);

                        Hub.Clients.deleteTruck(truck.TruckNumber);
                        System.Diagnostics.Debug.WriteLine(DateTime.Now + " HUB: Removing Truck " + truck.TruckNumber);

                        towTrucks.RemoveAll(p => p.Old == true);
                    }

                    #endregion
                }


                System.Diagnostics.Debug.WriteLine("================Server: Total Number of trucks in local list: " + towTrucks.Count());
                System.Diagnostics.Debug.WriteLine("================Server: Total Number of trucks updated: " + iTruckUpdatesCount);
                System.Diagnostics.Debug.WriteLine("================Server: Total Number of trucks deleted: " + iTruckDeleteCount);

                iCounter += 1;
            }
            catch (Exception ex)
            {
                Util.WriteToLog(ex.Message);
            }
        }
Example #7
0
        public void UpdateAllTrucks()
        {
            UITowTruck truck = null;
            int        iTruckUpdatesCount = 0;
            int        iTruckDeleteCount  = 0;

            try
            {
                TowTruckData[] serviceTowTrucks = GetAllTrucksInService();

                var hasTruckChanged = false;
                var isTruckNew      = false;
                var addTruck        = true;

                lock (towTrucks)
                {
                    for (int i = 0; i < serviceTowTrucks.Length; i++)
                    {
                        TowTruckData serviceTowTruck = serviceTowTrucks[i];

                        if (!String.IsNullOrEmpty(_contractorName))
                        {
                            if (_contractorName == serviceTowTruck.ContractorName)
                            {
                                addTruck = true;
                            }
                            else
                            {
                                addTruck = false;
                            }
                        }
                        else
                        {
                            addTruck = true;
                        }


                        if (addTruck)
                        {
                            try
                            {
                                if (towTrucks.Any(p => p.TruckNumber.ToString() == serviceTowTruck.TruckNumber))
                                {
                                    truck           = towTrucks.Single(p => p.TruckNumber == serviceTowTruck.TruckNumber);
                                    hasTruckChanged = HasTruckChanged(ref truck, serviceTowTruck);
                                }
                                else
                                {
                                    //new tow truck
                                    iTruckUpdatesCount += 1;
                                    truck            = new UITowTruck();
                                    truck.LastUpdate = 0;
                                    truck.Old        = false;

                                    isTruckNew      = true;
                                    hasTruckChanged = true;
                                }

                                #region Set Truck Properties

                                truck.TruckNumber       = serviceTowTruck.TruckNumber == null ? "Not set" : serviceTowTruck.TruckNumber;
                                truck.BeatNumber        = serviceTowTruck.BeatNumber == null ? "Not set" : serviceTowTruck.BeatNumber;
                                truck.BeatSegmentNumber = "Not set";

                                truck.Speed       = serviceTowTruck.Speed;
                                truck.Lat         = serviceTowTruck.Lat;
                                truck.Lon         = serviceTowTruck.Lon;
                                truck.Heading     = serviceTowTruck.Heading;
                                truck.LastMessage = serviceTowTruck.LastMessage.ToString();

                                truck.DriverName     = serviceTowTruck.DriverName;
                                truck.ContractorName = serviceTowTruck.ContractorName;
                                truck.Location       = serviceTowTruck.Location;

                                truck.SpeedingTime       = serviceTowTruck.SpeedingTime.ToString();
                                truck.SpeedingValue      = serviceTowTruck.SpeedingValue.ToString();
                                truck.OutOfBoundsMessage = serviceTowTruck.OutOfBoundsMessage;
                                truck.OutOfBoundsTime    = serviceTowTruck.OutOfBoundsTime.ToString();
                                truck.HasAlarm           = serviceTowTruck.Alarms;
                                truck.LastMessage        = serviceTowTruck.LastMessage.ToShortTimeString();

                                #region State

                                truck.VehicleState = serviceTowTruck.VehicleState;

                                if (serviceTowTruck.VehicleState == "Waiting for Driver Login")
                                {
                                    truck.VehicleStateIconUrl = "TBD.png";
                                }

                                else if (serviceTowTruck.VehicleState == "Driver Logged On")
                                {
                                    truck.VehicleStateIconUrl = "LoggedOn.png";
                                }

                                else if (serviceTowTruck.VehicleState == "On Patrol")
                                {
                                    truck.VehicleStateIconUrl = "OnPatrol.png";
                                }

                                else if (serviceTowTruck.VehicleState == "On Incident")
                                {
                                    truck.VehicleStateIconUrl = "OnAssist.png";
                                }

                                else if (serviceTowTruck.VehicleState == "On Break" || serviceTowTruck.VehicleState == "On Lunch" || serviceTowTruck.VehicleState == "Roll In" || serviceTowTruck.VehicleState == "Roll Out")
                                {
                                    truck.VehicleStateIconUrl = "NIS.png";
                                }

                                else if (serviceTowTruck.Alarms)
                                {
                                    //All alarms red (OnAlarm.pn) expect speeding is yellow
                                    truck.VehicleStateIconUrl = "Alarm.png";

                                    if (serviceTowTruck.SpeedingAlarm)
                                    {
                                        truck.VehicleStateIconUrl = "Speeding.png";
                                    }
                                }

                                #endregion

                                #endregion

                                serviceTowTruck = null;
                                UpdateTruck(truck, hasTruckChanged, isTruckNew);
                            }
                            catch (Exception ex)
                            {
                                Util.WriteToLog(ex.Message, "Error.txt");
                            }
                        }
                    }

                    iTruckDeleteCount = CleanupTruckList(iTruckDeleteCount, serviceTowTrucks);

                    serviceTowTrucks = null;

                    Util.WriteToLog(DateTime.Now + "================Server: Total Number of trucks in local list: " + towTrucks.Count(), "Update.txt");
                    Util.WriteToLog(DateTime.Now + "================Server: Total Number of trucks updated: " + iTruckUpdatesCount, "Update.txt");
                    Util.WriteToLog(DateTime.Now + "================Server: Total Number of trucks deleted: " + iTruckDeleteCount, "Update.txt");
                }
            }
            catch (Exception ex)
            {
                Util.WriteToLog(ex.Message, "Error.txt");
            }
        }
Example #8
0
        //[OutputCache(CacheProfile = "TruckList")]
        public ActionResult UpdateAllTrucks()
        {
            List <UITowTruck> towTrucks   = new List <UITowTruck>();
            List <TruckState> truckStates = this.GetTruckStates();

            try
            {
                if (HttpContext.Cache["Trucks"] != null)
                {
                    towTrucks = (List <UITowTruck>)HttpContext.Cache["Trucks"];
                    Debug.WriteLine("Returning CACHED truck list: " + DateTime.Now);
                }
                else
                {
                    using (TowTruckServiceClient service = new TowTruckServiceClient())
                    {
                        TowTruckData[] serviceTowTrucks = service.CurrentTrucks();

                        for (int i = 0; i < serviceTowTrucks.Length; i++)
                        {
                            #region
                            TowTruckData serviceTowTruck = serviceTowTrucks[i];

                            UITowTruck truck = new UITowTruck();

                            try
                            {
                                truck.LastUpdate = 0;
                                truck.Old        = false;

                                #region Set Truck Properties

                                truck.TruckNumber       = serviceTowTruck.TruckNumber == null ? "Not set" : serviceTowTruck.TruckNumber;
                                truck.BeatNumber        = serviceTowTruck.BeatNumber == null ? "Not set" : serviceTowTruck.BeatNumber;
                                truck.BeatSegmentNumber = "Not set";

                                truck.Speed   = serviceTowTruck.Speed;
                                truck.Lat     = serviceTowTruck.Lat;
                                truck.Lon     = serviceTowTruck.Lon;
                                truck.Heading = serviceTowTruck.Heading;

                                //truck.UserContractorName = this.UsersContractorCompanyName; //the logged in user's contractor name association
                                truck.DriverName     = serviceTowTruck.DriverName;
                                truck.ContractorName = serviceTowTruck.ContractorName;
                                truck.Location       = serviceTowTruck.OutOfBoundsMessage;

                                if (serviceTowTruck.SpeedingTime.ToString() != "1/1/0001 12:00:00 AM" && serviceTowTruck.SpeedingTime.ToString() != "1/1/2001 12:00:00 AM")
                                {
                                    truck.SpeedingTime = serviceTowTruck.SpeedingTime.ToString("hh:mm:ss tt");
                                }

                                truck.SpeedingValue      = serviceTowTruck.SpeedingValue.ToString();
                                truck.OutOfBoundsMessage = serviceTowTruck.OutOfBoundsMessage;

                                if (serviceTowTruck.OutOfBoundsTime.ToString() != "1/1/0001 12:00:00 AM")
                                {
                                    truck.OutOfBoundsTime = serviceTowTruck.OutOfBoundsTime.ToString("hh:mm:ss tt");
                                }
                                truck.HasAlarm = serviceTowTruck.Alarms;

                                if (serviceTowTruck.LastMessage.ToString() != "1/1/0001 12:00:00 AM")
                                {
                                    truck.LastMessage = serviceTowTruck.LastMessage.ToString("hh:mm:ss");
                                }

                                if (serviceTowTruck.StatusStarted.ToString() != "1/1/0001 12:00:00 AM")
                                {
                                    truck.LastStatusChanged = serviceTowTruck.StatusStarted.ToString("hh:mm:ss tt");
                                }


                                truck.VehicleState        = serviceTowTruck.VehicleState;
                                truck.VehicleStateIconUrl = truckStates.Where(p => p.TruckState1 == truck.VehicleState).FirstOrDefault().TruckIcon;

                                if (serviceTowTruck.Alarms && String.IsNullOrEmpty(truck.VehicleState))
                                {
                                    //All alarms red (OnAlarm.png) expect speeding is yellow
                                    truck.VehicleStateIconUrl = "Alarm.png"; //Red

                                    if (serviceTowTruck.SpeedingAlarm)
                                    {
                                        truck.VehicleStateIconUrl = "Speeding.png"; //Yellow
                                    }
                                }

                                #endregion
                            }
                            catch (Exception ex)
                            {
                                Util.WriteToLog(ex.Message, "Error.txt");
                            }

                            serviceTowTruck = null;
                            towTrucks.Add(truck);
                            truck = null;

                            #endregion
                        }

                        int refreshRate = 0;
                        Int32.TryParse(ConfigurationManager.AppSettings["ServerRefreshRate"].ToString(), out refreshRate);
                        HttpContext.Cache.Add("Trucks", towTrucks, null, DateTime.Now.AddSeconds(refreshRate), Cache.NoSlidingExpiration, CacheItemPriority.High, null);
                        serviceTowTrucks = null;
                        Debug.WriteLine("Returning FRESH truck list: " + DateTime.Now);
                    }
                }
            }
            catch (Exception ex)
            {
                Util.WriteToLog(ex.Message, "Error.txt");
            }

            //check to see if current user is a contractor. Then filter to only "his/her" trucks"
            if (!String.IsNullOrEmpty(this.UsersContractorCompanyName))
            {
                towTrucks = towTrucks.Where(p => p.ContractorName == this.UsersContractorCompanyName).ToList();
            }

            return(Json(towTrucks.OrderBy(p => p.BeatNumber).ThenBy(p => p.TruckNumber), JsonRequestBehavior.AllowGet));
        }