public override Object ReadGameDataFromFile(String filename, int pauseBeforeStart) { if (sim == null) { sim = new Sim(); } if (dataReadFromFile == null || filename != lastReadFileName) { dataReadFromFileIndex = 0; var filePathResolved = Utilities.ResolveDataFile(this.dataFilesPath, filename); dataReadFromFile = DeSerializeObject <iRacingStructDumpWrapper[]>(filePathResolved); lastReadFileName = filename; Thread.Sleep(pauseBeforeStart); } if (dataReadFromFile != null && dataReadFromFile.Length > dataReadFromFileIndex) { bool IsNewSession = false; iRacingStructDumpWrapper structDumpWrapperData = dataReadFromFile[dataReadFromFileIndex]; if (structDumpWrapperData.data.SessionInfoUpdate != lastUpdate && structDumpWrapperData.data.SessionInfo.Length > 0) { IsNewSession = sim.SdkOnSessionInfoUpdated(structDumpWrapperData.data.SessionInfo, structDumpWrapperData.data.SessionNum, structDumpWrapperData.data.PlayerCarIdx); lastUpdate = structDumpWrapperData.data.SessionInfoUpdate; } sim.SdkOnTelemetryUpdated(structDumpWrapperData.data); iRacingStructWrapper structWrapperData = new iRacingStructWrapper() { data = sim, ticksWhenRead = structDumpWrapperData.ticksWhenRead }; structWrapperData.data.Telemetry.IsNewSession = IsNewSession; dataReadFromFileIndex++; return(structWrapperData); } else { return(null); } }
public override Object ReadGameData(Boolean forSpotter) { lock (this) { if (!initialised) { if (!InitialiseInternal()) { throw new GameDataReadException("Failed to initialise shared memory"); } } try { if (sdk.IsConnected()) { if (sim == null) { sim = new Sim(); } if (forSpotter) { return((int)sdk.GetData("CarLeftRight")); } _DriverId = (int)sdk.GetData("PlayerCarIdx"); int newUpdate = sdk.Header.SessionInfoUpdate; bool hasNewSessionData = false; bool isNewSession = false; if (newUpdate != lastUpdate) { var sessionNum = TryGetSessionNum(); if (sessionNum != null) { string sessionInfoUnFiltred = sdk.GetSessionInfoString(); if (sessionInfoUnFiltred == null) { return(null); } string sessionInfoFiltred = new SessionInfo(sessionInfoUnFiltred).Yaml; isNewSession = sim.SdkOnSessionInfoUpdated(sessionInfoFiltred, (int)sessionNum, DriverId); lastUpdate = newUpdate; hasNewSessionData = true; } else { return(null); } } iRacingData irData = new iRacingData(sdk, hasNewSessionData && dumpToFile, isNewSession); sim.SdkOnTelemetryUpdated(irData); iRacingStructWrapper structWrapper = new iRacingStructWrapper(); structWrapper.ticksWhenRead = DateTime.UtcNow.Ticks; structWrapper.data = sim; if (dumpToFile && dataToDump != null) { dataToDump.Add(new iRacingStructDumpWrapper() { ticksWhenRead = structWrapper.ticksWhenRead, data = irData }); } return(structWrapper); } else { return(null); } } catch (Exception ex) { throw new GameDataReadException(ex.Message, ex); } } }