public void when_a_driver_is_not_on_the_track_lap_time_column_colours_are_not_translated_into_set_lap_time_messages(SessionType session) { In(session).OnLap(5).Assert(translator => { var driver = translator.GetDriver(1); var message = new SetGridColumnColourMessage(1, GridColumn.LapTime, GridColumnColour.White); driver.SetColumnHasValue(GridColumn.LapTime, true); driver.LastLapTime = PT(120.765, PostedTimeType.Normal, 1); // In pits. driver.ChangeStatus(DriverStatus.InPits); Assert.Null(translator.Translate(message)); // Out. driver.ChangeStatus(DriverStatus.Out); Assert.Null(translator.Translate(message)); // Retired. driver.ChangeStatus(DriverStatus.Retired); Assert.Null(translator.Translate(message)); // Stopped. driver.ChangeStatus(DriverStatus.Stopped); Assert.Null(translator.Translate(message)); }); }
/// <inheritdoc/> public virtual void Visit(SetGridColumnColourMessage message) { }
void IMessageVisitor.Visit(SetGridColumnColourMessage message) { Dispatch(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; }
private Message TranslateSetLapTimeColour(SetGridColumnColourMessage message) { var driver = GetDriver(message); if(driver.IsOnTrack && driver.LastLapTime != null) { switch(message.Colour) { case GridColumnColour.White: return new SetDriverLapTimeMessage(driver.Id, new PostedTime(driver.LastLapTime.Time, LiveData.ToPostedTimeType(message.Colour), driver.LapNumber)); case GridColumnColour.Green: case GridColumnColour.Magenta: // The feed often sends a colour update for the previous lap time to indicate // that it was a PB or SB, in which case we publish a replacement time. return new ReplaceDriverLapTimeMessage(driver.Id, new PostedTime(driver.LastLapTime.Time, LiveData.ToPostedTimeType(message.Colour), driver.LastLapTime.LapNumber)); } } return null; }
private Message TranslateSetIntervalTimeColour(SetGridColumnColourMessage message) { return message.Colour == GridColumnColour.White ? GetDriver(message).LastIntervalMessage : null; }
private Message TranslateSetGridColumnColourMessage(SetGridColumnColourMessage message) { if(message.Colour == GridColumnColour.Yellow || !GetDriver(message).ColumnHasValue(message.Column)) { // Yellow indicates that the next column is about to / has received an update and this // column is no longer shows the latest information for the driver. Also, the feed often // seeds colour updates to columns which have no value. return null; } switch(message.Column) { case GridColumn.CarNumber: return TranslateSetCarNumberColour(message); case GridColumn.LapTime: return TranslateSetLapTimeColour(message); case GridColumn.Gap: return TranslateSetGapTimeColour(message); case GridColumn.S1: return TranslateSetSectorTimeColour(message, 1); case GridColumn.S2: return TranslateSetSectorTimeColour(message, 2); case GridColumn.S3: return TranslateSetSectorTimeColour(message, 3); case GridColumn.Interval: return TranslateSetIntervalTimeColour(message); default: return null; } }
private Message TranslateSetCarNumberColour(SetGridColumnColourMessage message) { return CreateStatusMessageIfChanged(GetDriver(message), LiveData.ToDriverStatus(message.Colour)); }
/// <inheritdoc/> public override void Visit(SetGridColumnColourMessage message) { Translated = TranslateSetGridColumnColourMessage(message); }