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

TranslateSetSectorTimeValue() private method

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

            if(message.Value.OrdinalEquals("OUT"))
            {
                return CreateStatusMessageIfChanged(driver, DriverStatus.Out);
            }
            if(message.Value.OrdinalEquals("STOP"))
            {
                return CreateStatusMessageIfChanged(driver, DriverStatus.Stopped);
            }
            if(driver.IsExpectingPitTimes)
            {
                return TranslateSetPitTimeValue(message, sectorNumber);
            }
            if(!driver.IsOnTrack)
            {
                return null;
            }
            var newTime = LiveData.ParseTime(message.Value);
            var newTimeType = LiveData.ToPostedTimeType(message.Colour);
            // As of China-2010 the feed sends value updates to previous columns with completely different
            // times and types. We can detect this when we receive an update for the previously completed
            // sector. If the sector number is not the one previously completed we process the message
            // normally.
            if(driver.IsPreviousSectorNumber(sectorNumber))
            {
                if(driver.GetLastSector(sectorNumber) == null)
                {
                    Log.WarnFormat("received value update to a previous sector but we have no" +
                        " previous sector times for the driver, cannot translate this message: {0}",
                        message);
                    return null;
                }
                return new ReplaceDriverSectorTimeMessage(driver.Id, sectorNumber,
                    new PostedTime(newTime, newTimeType, driver.GetLastSector(sectorNumber).LapNumber));
            }
            return TranslateSetDriverSectorTimeMessage(
                new SetDriverSectorTimeMessage(driver.Id, sectorNumber,
                    new PostedTime(newTime, newTimeType, driver.LapNumber)));
        }