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