AK.F1.Timing.Live.LiveMessageTranslator.TranslateSetSectorTimeColour C# (CSharp) Method

TranslateSetSectorTimeColour() private method

private TranslateSetSectorTimeColour ( SetGridColumnColourMessage message, int sectorNumber ) : Message
message AK.F1.Timing.Messages.Driver.SetGridColumnColourMessage
sectorNumber int
return Message
        private Message TranslateSetSectorTimeColour(SetGridColumnColourMessage message, int sectorNumber)
        {
            var driver = GetDriver(message);

            if(!driver.IsOnTrack || driver.IsExpectingPitTimes)
            {
                return null;
            }

            var lastSectorTime = driver.GetLastSector(sectorNumber);
            var newTimeType = LiveData.ToPostedTimeType(message.Colour);

            if(driver.IsCurrentSectorNumber(sectorNumber))
            {
                return TranslateSetDriverSectorTimeMessage(
                    new SetDriverSectorTimeMessage(driver.Id, sectorNumber,
                        new PostedTime(lastSectorTime.Time, newTimeType, driver.LapNumber)));
            }
            if(driver.IsPreviousSectorNumber(sectorNumber))
            {
                // The feed often sends a colour update for the previous sector time to indicate that
                // it was a PB or SB, in which case we publish a replacement time.
                // TODO only publish a replacement when the type has been upgraded and not down-graded.
                return new ReplaceDriverSectorTimeMessage(driver.Id, sectorNumber,
                    new PostedTime(lastSectorTime.Time, newTimeType, lastSectorTime.LapNumber));
            }
            Log.DebugFormat("received completely out of order S{0} update when an S{1} update" +
                " was expected, cannot translate this message: {2}", sectorNumber,
                driver.CurrentSectorNumber, message);
            return null;
        }