예제 #1
0
        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);
            }
        }
예제 #2
0
        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);
                }
            }
        }