// This class really needs some love.  There's a lot of behavior in here that should be pushed out into other classes that can be unit tests.
        static void Main(string[] args)
        {
            string jenkinsUrl;

            if (args.Length == 1)
                jenkinsUrl = args[0];
            else
            {
                System.Console.Write("Enter the Jenkins RSS feed url: ");
                jenkinsUrl = System.Console.ReadLine();
            }

            var feed = new JenkinsRssFeed(jenkinsUrl);
            var monitor = new BuildMonitor(feed);
            var port = GetTrafficLightPort();
            if (port == null)
                return;

            var light = new BuildLight(new TrafficLightController(port));

            light.TurnOffAllLights();

            while (true)
            {
                var currentStatus = GetCurrentStatus(monitor, feed);

                light.Update(currentStatus);

                System.Console.WriteLine("Current status: {0} {1}", currentStatus, DateTime.Now.ToShortTimeString());

                System.Threading.Thread.Sleep(10000);
            }
        }
        private static BuildStatus GetCurrentStatus(BuildMonitor monitor, JenkinsRssFeed feed)
        {
            try
            {
                return monitor.GetCurrentBuildStatus();
            }
            catch (AuthorizationFailedException)
            {
                System.Console.Write("Please enter Jenkins Username: "******"Please enter Jenkins Password: "******"Invalid Jenkins username / password combination.  Please try again.");
                    return GetCurrentStatus(monitor, feed);
                }

            }
        }