AcManager.Tools.SharedMemory.AcSharedGraphics.FromFile C# (CSharp) Method

FromFile() private method

private FromFile ( [ file ) : AcSharedGraphics
file [
return AcSharedGraphics
        public static AcSharedGraphics FromFile([NotNull] MemoryMappedFile file) {
            if (file == null) throw new ArgumentNullException(nameof(file));
            using (var stream = file.CreateViewStream())
            using (var reader = new BinaryReader(stream)) {
                var size = Marshal.SizeOf(typeof(AcSharedGraphics));
                var bytes = reader.ReadBytes(size);
                var handle = GCHandle.Alloc(bytes, GCHandleType.Pinned);
                var data = (AcSharedGraphics)Marshal.PtrToStructure(handle.AddrOfPinnedObject(), typeof(AcSharedGraphics));
                handle.Free();
                return data;
            }
        }
    }

Usage Example

Example #1
0
        private void UpdatePhysics()
        {
            if (_physicsFile == null)
            {
                return;
            }

            try {
                var physics = AcSharedPhysics.FromFile(_physicsFile);
                if (physics.PacketId != _previousPacketId)
                {
                    IsPaused = false;

                    _previousPacketId   = physics.PacketId;
                    _previousPacketTime = DateTime.Now;

                    if (Status != AcSharedMemoryStatus.Live)
                    {
                        Status       = AcSharedMemoryStatus.Live;
                        _gameProcess = TryToFindGameProcess();
                        KnownProcess = _gameProcess != null;
                    }

                    var graphics   = AcSharedGraphics.FromFile(_graphicsFile);
                    var staticInfo = AcSharedStaticInfo.FromFile(_staticInfoFile);
                    Shared = new AcShared(physics, graphics, staticInfo);
                }
                else if (_gameProcess?.HasExitedSafe() ?? (DateTime.Now - _previousPacketTime).TotalSeconds > 1d)
                {
                    IsPaused = false;
                    Status   = AcSharedMemoryStatus.Connected;
                    Shared   = null;
                }
                else
                {
                    IsPaused = Shared != null && Shared.Graphics.Status == AcGameStatus.AcPause;
                }
            } catch (Exception ex) {
                Logging.Error(ex);
                Status = AcSharedMemoryStatus.Disabled;
            }
        }
AcSharedGraphics