Skip to content

Commit

Permalink
refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
christothes committed Sep 10, 2021
1 parent 275aaa7 commit eaa5e2e
Show file tree
Hide file tree
Showing 21 changed files with 2,459 additions and 149 deletions.
16 changes: 16 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -348,3 +348,19 @@ MigrationBackup/

# Ionide (cross platform F# VS Code tools) working folder
.ionide/

# Coderush
.cr/

/src/*.lnk

# Rider ignored files
.idea/
/contentModel.xml
/modules.xml
/projectSettingsUpdater.xml
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
# Editor-based HTTP Client requests
/httpRequests/
23 changes: 11 additions & 12 deletions src/irsdkSharp.Calculation/GapIntervalExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
using System;
using System.Collections.Generic;
using System.Linq;
using irsdkSharp.Models;

namespace irsdkSharp.Calculation
{
Expand All @@ -21,7 +22,7 @@ public static class GapIntervalExtensions
/// <param name="dataModel"></param>
/// <param name="sessionModel"></param>
/// <returns></returns>
public static List<CarGapIntervalModel> CalculateGapsAndIntervals(IRacingDataModel dataModel, IRacingSessionModel sessionModel)
public static List<CarGapIntervalModel> CalculateGapsAndIntervals(Session dataModel, IRacingSessionModel sessionModel)
{
if (sessionModel == null) return null;
if (dataModel == null) return null;
Expand All @@ -40,7 +41,7 @@ public static List<CarGapIntervalModel> CalculateGapsAndIntervals(IRacingDataMod


//Get Current Session
var currentSessionNumber = dataModel.Data.SessionNum;
var currentSessionNumber = dataModel.SessionNum;

var currentSession = sessionModel.SessionInfo.Sessions
.Where(x => x.SessionNum == currentSessionNumber)
Expand All @@ -49,13 +50,15 @@ public static List<CarGapIntervalModel> CalculateGapsAndIntervals(IRacingDataMod

//All drivers ordered

var orderedDrivers = dataModel.Data.Cars
.Where(x => x.CarIdxLapDistPct != -1)
.OrderByDescending(x => x.CarIdxLap)
.ThenByDescending(x => x.CarIdxLapDistPct).ToList();
// var orderedDrivers = dataModel.Data.Cars
// .Where(x => x.CarIdxLapDistPct != -1)
// .OrderByDescending(x => x.CarIdxLap)
// .ThenByDescending(x => x.CarIdxLapDistPct).ToList();

//find car in first
var leader = orderedDrivers.FirstOrDefault();
// var leader = orderedDrivers.FirstOrDefault();
var leader = new CarModel();
var orderedDrivers = new List<CarModel>();
var leaderSession = currentSession.ResultsPositions.Where(ses => ses.CarIdx == leader.CarIdx).FirstOrDefault();
var leaderDriver = sessionModel.DriverInfo.Drivers.Where(ses => ses.CarIdx == leader.CarIdx).FirstOrDefault();

Expand Down Expand Up @@ -171,11 +174,7 @@ public static List<CarGapIntervalModel> CalculateGapsAndIntervals(this IRacingSD

if(sessionModel == null) return null;

var dataModel = racingSDK.GetSerializedData();

if(dataModel == null) return null;

return CalculateGapsAndIntervals(dataModel, sessionModel);
return CalculateGapsAndIntervals(racingSDK.Session, sessionModel);
}

private static (TimeSpan, int) BetweenCars(CarModel leader, CarModel car, float trackLength)
Expand Down
9 changes: 5 additions & 4 deletions src/irsdkSharp.Calculation/IRatingExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,20 @@
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using irsdkSharp.Models;

namespace irsdkSharp.Calculation
{
public static class IRatingExtensions
{
private static readonly double _initialConstant = 1600 / Math.Log(2);

public static Dictionary<int, double> CalculateIRatingGains(IRacingDataModel dataModel, IRacingSessionModel sessionModel)
public static Dictionary<int, double> CalculateIRatingGains(Session dataModel, IRacingSessionModel sessionModel)
{
if (sessionModel == null) return null;

if (dataModel == null) return null;
var currentSessionId = dataModel.Data.SessionNum;
var currentSessionId = dataModel.SessionNum;
var currentSession = sessionModel.SessionInfo.Sessions.Where(x=>x.SessionNum == currentSessionId).FirstOrDefault();

if (currentSession == null) return null;
Expand Down Expand Up @@ -151,9 +152,9 @@ public static Dictionary<int, double> CalculateIRatingGains(this IRacingSDK raci
{
var sessionModel = racingSDK.GetSerializedSessionInfo();

var dataModel = racingSDK.GetSerializedData();
// var dataModel = racingSDK.GetSerializedData();

return CalculateIRatingGains(dataModel, sessionModel);
return CalculateIRatingGains(racingSDK.Session, sessionModel);
}
}
}
18 changes: 8 additions & 10 deletions src/irsdkSharp.Calculation/RelativeExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -6,31 +6,33 @@
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography.X509Certificates;
using irsdkSharp.Models;

namespace irsdkSharp.Calculation
{
public static class RelativeExtensions
{
public static Dictionary<int, CarRelativeModel> CalculateRelatives(IRacingDataModel dataModel, IRacingSessionModel sessionModel)
public static Dictionary<int, CarRelativeModel> CalculateRelatives(Session dataModel, IRacingSessionModel sessionModel)
{
if (sessionModel == null) return null;
if (dataModel == null) return null;

var relatives = new Dictionary<int, CarRelativeModel>();

var currentCar = sessionModel.DriverInfo.Drivers.FirstOrDefault(x => x.CarIdx == dataModel.Data.PlayerCarIdx);
var currentCar = sessionModel.DriverInfo.Drivers.FirstOrDefault(x => x.CarIdx == dataModel.PlayerCarIdx);

if (currentCar == null || currentCar.IsSpectator != 0)
{
currentCar = sessionModel.DriverInfo.Drivers.FirstOrDefault(x => x.CarIdx == dataModel.Data.CamCarIdx);
currentCar = sessionModel.DriverInfo.Drivers.FirstOrDefault(x => x.CarIdx == dataModel.CamCarIdx);
}
if (currentCar == null || currentCar.IsSpectator != 0)
{
currentCar = sessionModel.DriverInfo.Drivers.FirstOrDefault(x => x.CarIsPaceCar == "0" && x.CarIsAI == "0");
}
var currentCarData = dataModel.Data.Cars.FirstOrDefault(x => x.CarIdx == currentCar.CarIdx);

foreach (var car in dataModel.Data.Cars)
var currentCarData = new CarModel();// dataModel.Data.Cars.FirstOrDefault(x => x.CarIdx == currentCar.CarIdx);

foreach (var car in Enumerable.Empty<CarModel>())//dataModel.Data.Cars)
{
if (car.CarIdx == currentCar.CarIdx)
{
Expand Down Expand Up @@ -74,11 +76,7 @@ public static Dictionary<int, CarRelativeModel> CalculateRelatives(this IRacingS

if(sessionModel == null) return null;

var dataModel = racingSDK.GetSerializedData();

if(dataModel == null) return null;

return CalculateRelatives(dataModel, sessionModel);
return CalculateRelatives(racingSDK.Session, sessionModel);
}
}
}
55 changes: 32 additions & 23 deletions src/irsdkSharp.Console/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
using irsdkSharp.Serialization;
using irsdkSharp.Serialization.Models.Session;
using System;
using System.Data.SqlTypes;
using System.IO;
using System.Linq;
using System.Threading;
Expand Down Expand Up @@ -79,6 +80,7 @@ private static void Loop()
// Check if we can find the sim
if (sdk.IsConnected())
{
//Console.WriteLine("SDK is connected.");
if (!_IsConnected)
{
// If this is the first time, raise the Connected event
Expand Down Expand Up @@ -111,34 +113,33 @@ private static void Loop()
_DriverId = (int)sdk.GetData("PlayerCarIdx");
}

var data = sdk.GetSerializedData();
//var data = sdk.GetSerializedData();

// Raise the TelemetryUpdated event and pass along the lap info and session time
//var telArgs = new TelemetryUpdatedEventArgs(new TelemetryInfo(sdk), time);
// this.RaiseEvent(OnTelemetryUpdated, telArgs);

// Is the session info updated?
int newUpdate = sdk.Header.SessionInfoUpdate;
if (newUpdate != lastUpdate)
{
lastUpdate = newUpdate;
_session = sdk.GetSerializedSessionInfo();
}

if(data != null && _session != null)
{
Console.SetCursorPosition(0,0);

//if (data != null && _session != null)
//{
//Console.SetCursorPosition(0,0);
// var mm = IRacingSDK.GetMappedFile(sdk).CreateViewStream();
// byte[] bytes = new byte[mm.Length];
// var numBytes = mm.Read(bytes);

foreach (var car in data.Data.Cars.OrderByDescending(x => x.CarIdxLap).ThenByDescending(x => x.CarIdxLapDistPct))
{
var currentData = _session.DriverInfo.Drivers.Where(y => y.CarIdx == car.CarIdx).FirstOrDefault();
if (currentData != null && car.CarIdxEstTime != 0)
{
Console.WriteLine($"{currentData.CarNumber}\t{string.Format("{0:0.00}", car.CarIdxEstTime)}\t{string.Format("{0:0.00}", car.CarIdxLapDistPct * 100)}");
}
//if (numBytes > 0)
// {
//File.WriteAllBytes($".\\{Guid.NewGuid()}.ibt", bytes);
// }

}
//foreach (var car in data.Data.Cars.OrderByDescending(x => x.CarIdxLap).ThenByDescending(x => x.CarIdxLapDistPct))
//{
// var currentData = _session.DriverInfo.Drivers.Where(y => y.CarIdx == car.CarIdx).FirstOrDefault();
// if (currentData != null && car.CarIdxEstTime != 0)
// {
//Console.WriteLine($"{currentData.CarNumber}\t{string.Format("{0:0.00}", car.CarIdxEstTime)}\t{string.Format("{0:0.00}", car.CarIdxLapDistPct * 100)}");
Console.WriteLine($"SeesionTick: {sdk.Session.SessionTick.ToString()}");
//}
//}

//foreach (var driver in _session.DriverInfo.Drivers.Where(x => x.IsSpectator == 0).Where(x => x.CarIsPaceCar == "0").Where(x => x.CarIsAI == "0"))
//{
Expand All @@ -152,7 +153,7 @@ private static void Loop()
// var a = "";
// }
//}
}
//}

}
else if (_hasConnected)
Expand All @@ -170,7 +171,15 @@ private static void Loop()
_DriverId = -1;

//Try to find the sim
sdk.Startup();
Console.WriteLine("Connecting to SDK.");
if (sdk.Startup())
{
Console.WriteLine("Connected.");
}
else
{
Console.WriteLine("Failed to connect.");
}
}

// Sleep for a short amount of time until the next update is available
Expand Down
28 changes: 14 additions & 14 deletions src/irsdkSharp.Serialization/IRacingSDKExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,20 @@ public static IRacingSessionModel GetSerializedSessionInfo(this IRacingSDK racin
return IRacingSessionModel.Serialize(sessionInfo);
}

public static IRacingDataModel GetSerializedData(this IRacingSDK racingSDK)
{
if (racingSDK.IsInitialized && racingSDK.Header != null)
{
var length = (int)IRacingSDK.GetFileMapView(racingSDK).Capacity;
var data = new byte[length];
IRacingSDK.GetFileMapView(racingSDK).ReadArray(0, data, 0, length);
//Serialise the string into objects, tada!
return IRacingDataModel.Serialize(
data[racingSDK.Header.Buffer..(racingSDK.Header.Buffer + racingSDK.Header.BufferLength)],
racingSDK.VarHeaders);
}
return null;
}
// public static IRacingDataModel GetSerializedData(this IRacingSDK racingSDK)
// {
// if (racingSDK.IsInitialized && racingSDK.Header != null)
// {
// var length = (int)IRacingSDK.GetFileMapView(racingSDK).Capacity;
// var data = new byte[length];
// IRacingSDK.GetFileMapView(racingSDK).ReadArray(0, data, 0, length);
// //Serialise the string into objects, tada!
// return IRacingDataModel.Serialize(
// data[racingSDK.Header.Offset..(racingSDK.Header.Offset + racingSDK.Header.BufferLength)],
// racingSDK.Headers.Values);
// }
// return null;
// }

public static List<CarModel> GetPositions(this IRacingSDK racingSDK)
{
Expand Down
6 changes: 6 additions & 0 deletions src/irsdkSharp.sln
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "irsdkSharp.Serialization",
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "irsdkSharp.Calculation", "irsdkSharp.Calculation\irsdkSharp.Calculation.csproj", "{F039D704-A6F6-4A6F-8907-1805CF33FE19}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "irsdkSharp.Tests", "..\tests\irsdkSharp.Tests.csproj", "{F270C400-BA64-49D7-B7CD-528511FED4E8}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand All @@ -40,6 +42,10 @@ Global
{F039D704-A6F6-4A6F-8907-1805CF33FE19}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F039D704-A6F6-4A6F-8907-1805CF33FE19}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F039D704-A6F6-4A6F-8907-1805CF33FE19}.Release|Any CPU.Build.0 = Release|Any CPU
{F270C400-BA64-49D7-B7CD-528511FED4E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F270C400-BA64-49D7-B7CD-528511FED4E8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F270C400-BA64-49D7-B7CD-528511FED4E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F270C400-BA64-49D7-B7CD-528511FED4E8}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand Down
32 changes: 32 additions & 0 deletions src/irsdkSharp/AccessorExtensions.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
using System.IO.MemoryMappedFiles;
using System.Text;

namespace irsdkSharp
{
public static class AccessorExtensions
{
public static string ReadString(this MemoryMappedViewAccessor accessor, int offset, int maxLength, int minLength = 0)
{
StringBuilder sb;
if (minLength > 0)
{
sb = new(minLength);
}
else
{
sb = new();
}
char c;
for (int i = 0; i < maxLength; i++)
{
c = accessor.ReadChar(i);
if(c == '\0')
{
break;
}
sb.Append(c);
}
return sb.ToString();
}
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
namespace irsdkSharp.Enums
using System;

namespace irsdkSharp.Enums
{
public enum CameraStateTypes
[Flags]
public enum CameraState
{
None = 0x0000,
IsSessionScreen = 0x0001,
Expand Down
Loading

0 comments on commit eaa5e2e

Please sign in to comment.