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;
}