public override Object ReadGameData(Boolean forSpotter) { lock (this) { RaceRoomShared _raceroomapistruct = new RaceRoomShared(); 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 { _raceroomapistruct = (RaceRoomShared)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(RaceRoomShared)); } finally { handle.Free(); } } R3EStructWrapper structWrapper = new R3EStructWrapper(); structWrapper.ticksWhenRead = DateTime.Now.Ticks; structWrapper.data = _raceroomapistruct; if (!forSpotter && dumpToFile && dataToDump != null) { 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 <R3EStructWrapper[]>(dataFilesPath + filename); lastReadFileName = filename; } if (dataReadFromFile != null && dataReadFromFile.Length > dataReadFromFileIndex) { R3EStructWrapper 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 <R3EStructWrapper[]>(filePathResolved); lastReadFileName = filename; Thread.Sleep(pauseBeforeStart); } if (dataReadFromFile != null && dataReadFromFile.Length > dataReadFromFileIndex) { R3EStructWrapper structWrapperData = dataReadFromFile[dataReadFromFileIndex]; dataReadFromFileIndex++; return(structWrapperData); } else { return(null); } }
public override Object ReadGameData(Boolean forSpotter) { lock (this) { RaceRoomShared _raceroomapistruct = new RaceRoomShared(); 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); _raceroomapistruct = (RaceRoomShared)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(RaceRoomShared)); handle.Free(); } R3EStructWrapper structWrapper = new R3EStructWrapper(); structWrapper.ticksWhenRead = DateTime.Now.Ticks; structWrapper.data = _raceroomapistruct; if (!forSpotter && dumpToFile && dataToDump != null) { dataToDump.Add(structWrapper); } return structWrapper; } catch (Exception ex) { throw new GameDataReadException(ex.Message, ex); } } }