/// <summary> /// Initialises a new instance of the <see cref="SessionModelBuilder"/> class and specifies /// the <paramref name="session"/> to build. /// </summary> /// <param name="session">The session to build.</param> /// <exception cref="System.ArgumentNullException"> /// Throw when <paramref name="session"/> is <see langword="null"/>. /// </exception> public SessionModelBuilder(SessionModel session) { Guard.NotNull(session, "session"); Model = session; Drivers = new DriverMessageDispatcher(session); }
public override void Run() { Message message; SessionModel session = new SessionModel(); using(var input = File.OpenRead(_path)) using(var reader = new DecoratedObjectReader(input)) { while((message = reader.Read<Message>()) != null) { session.Process(message); } } session.Print(); }
public static void Main(string[] args) { new SpeedCapturesModelTest().only_the_fastest_six_speeds_are_maintained(); Message message; var session = new SessionModel(); var path = @"D:\dev\.net\src\ak-f1-timing\tms\2011\14-singapore\race.tms"; using(var reader = F1Timing.Playback.Read(path)) { reader.PlaybackSpeed = 5000000d; while((message = reader.Read()) != null) { session.Process(message); } Print(session.SpeedCaptures.S1); Print(session.SpeedCaptures.S2); Print(session.SpeedCaptures.S3); Print(session.SpeedCaptures.Straight); Debugger.Break(); } }
private static void WriteTrackStatistics(SessionModel session) { WriteLine(); WriteLine("+------------------------------------------------------------------------------------------+"); WriteLine("| WEATHER STATISTICS |"); WriteLine("+------------------+-----------+-----------+-----------+-----------+-----------+-----------+"); WriteLine("| | Current | Avg | Min | Max | Range | STD DEV |"); WriteLine("+------------------+-----------+-----------+-----------+-----------+-----------+-----------+"); WriteLine("|Air Temperature |{0,11}|{1,11}|{2,11}|{3,11}|{4,11}|{5,11}|", Format.Temperature(session.Weather.AirTemperature.Current.Value), Format.Temperature(session.Weather.AirTemperature.Mean), Format.Temperature(session.Weather.AirTemperature.Minimum), Format.Temperature(session.Weather.AirTemperature.Maximum), Format.Temperature(session.Weather.AirTemperature.Range), Format.Temperature(session.Weather.AirTemperature.StandardDeviation)); WriteLine("|Track Temperature |{0,11}|{1,11}|{2,11}|{3,11}|{4,11}|{5,11}|", Format.Temperature(session.Weather.TrackTemperature.Current), Format.Temperature(session.Weather.TrackTemperature.Mean), Format.Temperature(session.Weather.TrackTemperature.Minimum), Format.Temperature(session.Weather.TrackTemperature.Maximum), Format.Temperature(session.Weather.TrackTemperature.Range), Format.Temperature(session.Weather.TrackTemperature.StandardDeviation)); WriteLine("|Pressure: |{0,11}|{1,11}|{2,11}|{3,11}|{4,11}|{5,11}|", Format.Pressure(session.Weather.Pressure.Current), Format.Pressure(session.Weather.Pressure.Mean), Format.Pressure(session.Weather.Pressure.Minimum), Format.Pressure(session.Weather.Pressure.Maximum), Format.Pressure(session.Weather.Pressure.Range), Format.Pressure(session.Weather.Pressure.StandardDeviation)); WriteLine("|Wind Speed: |{0,11}|{1,11}|{2,11}|{3,11}|{4,11}|{5,11}|", Format.WindSpeed(session.Weather.WindSpeed.Current), Format.WindSpeed(session.Weather.WindSpeed.Mean), Format.WindSpeed(session.Weather.WindSpeed.Minimum), Format.WindSpeed(session.Weather.WindSpeed.Maximum), Format.WindSpeed(session.Weather.WindSpeed.Range), Format.WindSpeed(session.Weather.WindSpeed.StandardDeviation)); WriteLine("|Wind Direction: |{0,11}|{1,11}|{2,11}|{3,11}|{4,11}|{5,11}|", Format.WindDirection(session.Weather.WindAngle.Current.Value), Format.WindDirection(session.Weather.WindAngle.Mean), Format.WindDirection(session.Weather.WindAngle.Minimum), Format.WindDirection(session.Weather.WindAngle.Maximum), Format.WindDirection(session.Weather.WindAngle.Range), Format.WindDirection(session.Weather.WindAngle.StandardDeviation)); WriteLine("|Humidity: |{0,11}|{1,11}|{2,11}|{3,11}|{4,11}|{5,11}|", Format.Humidity(session.Weather.Humidity.Current), Format.Humidity(session.Weather.Humidity.Mean), Format.Humidity(session.Weather.Humidity.Minimum), Format.Humidity(session.Weather.Humidity.Maximum), Format.Humidity(session.Weather.Humidity.Range), Format.Humidity(session.Weather.Humidity.StandardDeviation)); WriteLine("+------------------+-----------------------------------------------------------------------+"); }
private static void WriteSessionStatistics(SessionModel session) { WriteLine(); WriteLine("+---------------------------------------+"); WriteLine("| SESSION STATISTICS |"); WriteLine("+------------------+--------------------+"); WriteLine("|Session Type |{0,20}|", session.SessionType); WriteLine("|Session Status |{0,20}|", session.SessionStatus); WriteLine("|Session Time |{0,20}|", session.ElapsedSessionTime); WriteLine("|Rem Session Time |{0,20}|", session.RemainingSessionTime); WriteLine("|Session Laps |{0,20}|", session.RaceLapNumber); WriteLine("|Drivers |{0,20}|", session.Drivers.Count); WriteLine("+------------------+--------------------+"); WriteLine("+--------------------------------------------------------------------+"); WriteLine("| BEST LAP AND SECTOR TIMES |"); WriteLine("+--------------------+-----------+-------+-------+-------+-----------+"); WriteLine("| DRIVER | BEST | S1 | S2 | S3 | POSS |"); WriteLine("+--------------------+-----------+-------+-------+-------+-----------+"); foreach(DriverModel driver in session.Drivers) { TimeSpan sector; TimeSpan possible = TimeSpan.Zero; Write("|{0,-20}|", driver.Name); Write("{0,11}|", Format.LapTime(driver.LapTimes.Minimum)); foreach(var times in driver.SectorTimes) { // TODO !!!!! possible += sector = times.Minimum != null ? times.Minimum.Value : TimeSpan.Zero; Write("{0,7}|", Format.SectorTime(sector)); } WriteLine("{0,11}|", "~" + Format.LapTime(possible)); } WriteLine("+--------------------------------------------------------------------+"); WriteLine(); WriteLine("+---------------------------------------------+"); WriteLine("| TOTAL SECTOR / LAP TIME / PIT COUNTS |"); WriteLine("+--------------------+----+----+----+----+----+"); WriteLine("| DRIVER | S1 | S2 | S3 | L | P |"); WriteLine("+--------------------+----+----+----+----+----+"); foreach(DriverModel driver in session.Drivers) { Write("|{0,-20}|", driver.Name); foreach(var times in driver.SectorTimes) { Write("{0,4}|", times.Values.Count); } Write("{0,4}|", driver.LapTimes.Values.Count); WriteLine("{0,4}|", driver.PitCount); } WriteLine("+--------------------+----+----+----+----+----+"); }
private static void WriteRace(SessionModel session) { WriteLine("+---+---+---+--------------------+-------+-------+-----------+-------+-------+-------+----+"); WriteLine("| I | P | C | DRIVER | GAP | INT | TIME | S1 | S2 | S3 | P |"); WriteLine("+---+---+---+--------------------+-------+-------+-----------+-------+-------+-------+----+"); foreach(var row in ((RaceGridModel)session.Grid).Rows.OrderBy(r => r.RowIndex)) { Write("|"); Write("{0,3}", row.DriverId); Write("|"); Write("{0,3}", row.Position); Write("|"); Write("{0,3}", row.CarNumber); Write("|"); Write("{0,-20}", row.DriverName); Write("|"); Write("{0,7}", row.Gap); Write("|"); Write("{0,7}", row.Interval); Write("|"); Write("{0,11}", row.LapTime); Write("|"); Write("{0,7}", row.S1); Write("|"); Write("{0,7}", row.S2); Write("|"); Write("{0,7}", row.S3); Write("|"); Write("{0,4}", row.PitCount); Write("|"); WriteLine(); } WriteLine("+-------------------------------------------------------------------------------------------+"); }
private static void WriteQually(SessionModel session) { WriteLine("+---+---+---+--------------------+-----------+-----------+-----------+-------+-------+-------+----+"); WriteLine("| I | P | C | DRIVER | Q1 | Q2 | Q3 | S1 | S2 | S3 | L |"); WriteLine("+---+---+---+--------------------+-----------+-----------+-----------+-------+-------+-------+----+"); foreach(var row in ((QuallyGridModel)session.Grid).Rows.OrderBy(r => r.RowIndex)) { Write("|"); Write("{0,3}", row.DriverId); Write("|"); Write("{0,3}", row.Position); Write("|"); Write("{0,3}", row.CarNumber); Write("|"); Write("{0,-20}", row.DriverName); Write("|"); Write("{0,11}", row.Q1); Write("|"); Write("{0,11}", row.Q2); Write("|"); Write("{0,11}", row.Q3); Write("|"); Write("{0,7}", row.S1); Write("|"); Write("{0,7}", row.S2); Write("|"); Write("{0,7}", row.S3); Write("|"); Write("{0,4}", row.Laps); Write("|"); WriteLine(); } WriteLine("+----------------------------------------------------------------------------------------------+"); }
private static void WritePractice(SessionModel session) { WriteLine("+---+---+---+--------------------+-----------+--------+-------+-------+-------+----+"); WriteLine("| I | P | C | DRIVER | BEST | GAP | S1 | S2 | S3 | L |"); WriteLine("+---+---+---+--------------------+-----------+--------+-------+-------+-------+----+"); foreach(var row in ((PracticeGridModel)session.Grid).Rows.OrderBy(r => r.RowIndex)) { Write("|"); Write("{0,3}", row.DriverId); Write("|"); Write("{0,3}", row.Position); Write("|"); Write("{0,3}", row.CarNumber); Write("|"); Write("{0,-20}", row.DriverName); Write("|"); Write("{0,11}", row.Best); Write("|"); Write("{0,8}", row.Gap); Write("|"); Write("{0,7}", row.S1); Write("|"); Write("{0,7}", row.S2); Write("|"); Write("{0,7}", row.S3); Write("|"); Write("{0,4}", row.Laps); Write("|"); WriteLine(); } WriteLine("+----------------------------------------------------------------------------------+"); }
private static void WriteTotalSectorLapTimeAndPitCounts(SessionModel session) { WriteLine(); WriteLine("+---------------------------------------------+"); WriteLine("| TOTAL SECTOR / LAP TIME / PIT COUNTS |"); WriteLine("+--------------------+----+----+----+----+----+"); WriteLine("| DRIVER | S1 | S2 | S3 | L | P |"); WriteLine("+--------------------+----+----+----+----+----+"); foreach(var driver in session.Drivers) { Write("|{0,-20}|", driver.Name); Write("{0,4}|", driver.LapTimes.S1.Items.Count); Write("{0,4}|", driver.LapTimes.S2.Items.Count); Write("{0,4}|", driver.LapTimes.S3.Items.Count); Write("{0,4}|", driver.LapTimes.Laps.Items.Count); WriteLine("{0,4}|", driver.PitTimes.Count); } WriteLine("+--------------------+----+----+----+----+----+"); }
private static void WriteSpeedCaptures(SessionModel session) { WriteLine(); WriteLine("+---------------------------------------------------------------------------------------------------------------+"); WriteLine("| SPEED CAPTURES |"); WriteLine("+---------------------------+---------------------------+---------------------------+---------------------------+"); WriteLine("| S1 | S2 | S3 | TRAP |"); WriteLine("+---------------------------+---------------------------+---------------------------+---------------------------+"); Action<ReadOnlyObservableCollection<SpeedCaptureModel>, int> writeCapture = (captures, i) => { Write("{0,-20}", i < captures.Count ? captures[i].Driver.Name : string.Empty); Write("{0,7}|", i < captures.Count ? Format.Speed(captures[i].Speed) : string.Empty); }; var model = session.SpeedCaptures; for(int i = 0, l = new[] { model.S1.Count, model.S2.Count, model.S3.Count, model.Straight.Count }.Max(); i < l; ++i) { Write("|"); writeCapture(session.SpeedCaptures.S1, i); writeCapture(session.SpeedCaptures.S2, i); writeCapture(session.SpeedCaptures.S3, i); writeCapture(session.SpeedCaptures.Straight, i); WriteLine(); } WriteLine("+---------------------------+---------------------------+---------------------------+---------------------------+"); }
private static void WriteSessionStatistics(SessionModel session) { WriteLine(); WriteLine("+---------------------------------------+"); WriteLine("| SESSION STATISTICS |"); WriteLine("+------------------+--------------------+"); WriteLine("|Session Type |{0,20}|", session.SessionType); WriteLine("|Session Status |{0,20}|", session.SessionStatus); WriteLine("|Session Time |{0,20}|", session.ElapsedSessionTime); WriteLine("|Rem Session Time |{0,20}|", session.RemainingSessionTime); WriteLine("|Session Laps |{0,20}|", session.RaceLapNumber); WriteLine("|Drivers |{0,20}|", session.Drivers.Count); WriteLine("|Message Count |{0,20}|", session.Feed.MessageCount); WriteLine("+------------------+--------------------+"); }
private static void WriteBestLapAndSectorTimes(SessionModel session) { WriteLine(); WriteLine("+--------------------------------------------------------------------+"); WriteLine("| BEST LAP AND SECTOR TIMES |"); WriteLine("+--------------------+-----------+-------+-------+-------+-----------+"); WriteLine("| DRIVER | BEST | S1 | S2 | S3 | POSS |"); WriteLine("+--------------------+-----------+-------+-------+-------+-----------+"); foreach(var driver in session.Drivers.OrderBy(x => x.LapTimes.Laps.Minimum)) { var times = driver.LapTimes; Write("|{0,-20}|", driver.Name); Write("{0,11}|", Format.LapTime(times.Laps.Minimum)); Write("{0,7}|", Format.SectorTime(times.S1.Minimum)); Write("{0,7}|", Format.SectorTime(times.S2.Minimum)); Write("{0,7}|", Format.SectorTime(times.S3.Minimum)); TimeSpan? possible = null; if(times.S1.Minimum != null && times.S2.Minimum != null && times.S3.Minimum != null) { possible = times.S1.Minimum.Time + times.S2.Minimum.Time + times.S3.Minimum.Time; } Write("{0,11}|", Format.LapTime(possible)); WriteLine(); } WriteLine("+--------------------------------------------------------------------+"); }