/// <summary> /// Tries to open a shared memory map. /// </summary> /// <param name="globalMemoryRegion"></param> /// <param name="memoryRegionId"></param> /// <param name="sharedMemoryMapView"></param> /// <returns></returns> public static bool TryOpenExisting( this GlobalMemoryRegion globalMemoryRegion, MlosInternal.MemoryRegionId memoryRegionId, out SharedMemoryMapView sharedMemoryMapView) { MlosInternal.RegisteredMemoryRegionConfig.CodegenKey registeredMemoryLookupKey = default; registeredMemoryLookupKey.MemoryRegionId = memoryRegionId; // Locate shared memory region config. // SharedConfig <MlosProxyInternal.RegisteredMemoryRegionConfig> registeredMemoryRegionSharedConfig = SharedConfigManager.Lookup(globalMemoryRegion.SharedConfigDictionary, registeredMemoryLookupKey); if (!registeredMemoryRegionSharedConfig.HasSharedConfig) { sharedMemoryMapView = null; return(false); } // Config exists, create a shared config memory region. // MlosProxyInternal.RegisteredMemoryRegionConfig registeredMemoryRegionConfig = registeredMemoryRegionSharedConfig.Config; sharedMemoryMapView = SharedMemoryMapView.OpenExisting( registeredMemoryRegionConfig.MemoryMapName.Value, registeredMemoryRegionConfig.MemoryRegionSize); return(true); }
/// <summary> /// Registers the shared config memory region. /// </summary> /// <param name="sharedMemoryRegionIndex">Index of the shared config region.</param> private void RegisterSharedConfigMemoryRegion(ushort sharedMemoryRegionIndex) { MlosInternal.RegisteredMemoryRegionConfig.CodegenKey codegenKey = default; codegenKey.MemoryRegionType = MlosInternal.MemoryRegionType.SharedConfig; codegenKey.MemoryRegionIndex = sharedMemoryRegionIndex; // Locate shared memory region config. // SharedConfig <MlosProxyInternal.RegisteredMemoryRegionConfig> registeredMemoryRegionSharedConfig = SharedConfigManager.Lookup(mlosContext.GlobalMemoryRegion.SharedConfigDictionary, codegenKey); if (registeredMemoryRegionSharedConfig.HasSharedConfig) { // Config exists, register memory region with the shared config manager. // MlosProxyInternal.RegisteredMemoryRegionConfig registeredMemoryRegionConfig = registeredMemoryRegionSharedConfig.Config; mlosContext.SharedConfigManager.RegisterSharedConfigMemoryRegion( sharedMemoryRegionIndex: sharedMemoryRegionIndex, sharedMemoryMapName: registeredMemoryRegionConfig.SharedMemoryMapName.Value, memoryRegionSize: registeredMemoryRegionConfig.MemoryRegionSize); } }