public override Object ReadGameData(Boolean forSpotter) { lock (this) { pCarsAPIStruct _pcarsapistruct = new pCarsAPIStruct(); if (!initialised) { if (!InitialiseInternal()) { throw new GameDataReadException("Failed to initialise shared memory"); } } try { using (var sharedMemoryStreamView = memoryMappedFile.CreateViewStream()) { BinaryReader _SharedMemoryStream = new BinaryReader(sharedMemoryStreamView); sharedMemoryReadBuffer = _SharedMemoryStream.ReadBytes(sharedmemorysize); GCHandle handle = GCHandle.Alloc(sharedMemoryReadBuffer, GCHandleType.Pinned); try { _pcarsapistruct = (pCarsAPIStruct)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(pCarsAPIStruct)); } finally { handle.Free(); } } PCarsStructWrapper structWrapper = new PCarsStructWrapper(); structWrapper.ticksWhenRead = DateTime.UtcNow.Ticks; structWrapper.data = _pcarsapistruct; if (!forSpotter && dumpToFile && dataToDump != null && _pcarsapistruct.mTrackLocation != null && _pcarsapistruct.mTrackLocation.Length > 0) { dataToDump.Add(structWrapper); } return(structWrapper); } catch (Exception ex) { throw new GameDataReadException(ex.Message, ex); } } }
public override Object ReadGameDataFromFile(String filename) { if (dataReadFromFile == null || filename != lastReadFileName) { dataReadFromFileIndex = 0; dataReadFromFile = DeSerializeObject <PCarsStructWrapper[]>(dataFilesPath + filename); lastReadFileName = filename; } if (dataReadFromFile != null && dataReadFromFile.Length > dataReadFromFileIndex) { PCarsStructWrapper structWrapperData = dataReadFromFile[dataReadFromFileIndex]; dataReadFromFileIndex++; return(structWrapperData); } else { return(null); } }
public override Object ReadGameDataFromFile(String filename, int pauseBeforeStart) { if (dataReadFromFile == null || filename != lastReadFileName) { dataReadFromFileIndex = 0; var filePathResolved = Utilities.ResolveDataFile(this.dataFilesPath, filename); dataReadFromFile = DeSerializeObject <PCarsStructWrapper[]>(filePathResolved); lastReadFileName = filename; Thread.Sleep(pauseBeforeStart); } if (dataReadFromFile != null && dataReadFromFile.Length > dataReadFromFileIndex) { PCarsStructWrapper structWrapperData = dataReadFromFile[dataReadFromFileIndex]; dataReadFromFileIndex++; return(structWrapperData); } else { return(null); } }
public override Object ReadGameData(Boolean forSpotter) { lock (this) { pCarsAPIStruct _pcarsapistruct = new pCarsAPIStruct(); if (!initialised) { if (!InitialiseInternal()) { throw new GameDataReadException("Failed to initialise shared memory"); } } try { using (var sharedMemoryStreamView = memoryMappedFile.CreateViewStream()) { BinaryReader _SharedMemoryStream = new BinaryReader(sharedMemoryStreamView); sharedMemoryReadBuffer = _SharedMemoryStream.ReadBytes(sharedmemorysize); handle = GCHandle.Alloc(sharedMemoryReadBuffer, GCHandleType.Pinned); _pcarsapistruct = (pCarsAPIStruct)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(pCarsAPIStruct)); //Console.WriteLine(_pcarsapistruct.mSpeed); handle.Free(); } PCarsStructWrapper structWrapper = new PCarsStructWrapper(); structWrapper.ticksWhenRead = DateTime.Now.Ticks; structWrapper.data = _pcarsapistruct; if (!forSpotter && dumpToFile && dataToDump != null && _pcarsapistruct.mTrackLocation != null && _pcarsapistruct.mTrackLocation.Length > 0) { dataToDump.Add(structWrapper); } return structWrapper; } catch (Exception ex) { throw new GameDataReadException(ex.Message, ex); } } }