/// <summary> /// Creates a shared memory region view. /// </summary> /// <typeparam name="T">Memory region type.</typeparam> /// <param name="sharedMemoryMapName"></param> /// <param name="sharedMemorySize"></param> /// <returns></returns> public static SharedMemoryRegionView <T> CreateNew <T>(string sharedMemoryMapName, ulong sharedMemorySize) where T : ICodegenProxy, new() { var memoryRegionView = new SharedMemoryRegionView <T>(SharedMemoryMapView.CreateNew(sharedMemoryMapName, sharedMemorySize)); MlosProxyInternal.MemoryRegionInitializer <T> memoryRegionInitializer = default; memoryRegionInitializer.Initialize(memoryRegionView); return(memoryRegionView); }
/// <summary> /// Creates or opens a shared memory region view. /// </summary> /// <typeparam name="T">Memory region type.</typeparam> /// <param name="sharedMemoryMapName"></param> /// <param name="sharedMemorySize"></param> /// <returns></returns> public static SharedMemoryRegionView <T> CreateOrOpen <T>(string sharedMemoryMapName, ulong sharedMemorySize) where T : ICodegenProxy, new() { try { return(new SharedMemoryRegionView <T>(SharedMemoryMapView.OpenExisting(sharedMemoryMapName, sharedMemorySize))); } catch (FileNotFoundException) { var memoryRegionView = new SharedMemoryRegionView <T>(SharedMemoryMapView.CreateNew(sharedMemoryMapName, sharedMemorySize)); MlosProxyInternal.MemoryRegionInitializer <T> memoryRegionInitializer = default; memoryRegionInitializer.Initialize(memoryRegionView); return(memoryRegionView); } }
/// <summary> /// Always create... /// </summary> /// <returns>InterProcessMlosContext instance.</returns> public static InterProcessMlosContext Create() { // Create or open the memory mapped files. // SharedMemoryRegionView <MlosProxyInternal.GlobalMemoryRegion> globalMemoryRegionView = SharedMemoryRegionView.CreateNew <MlosProxyInternal.GlobalMemoryRegion>(GlobalMemoryMapName, SharedMemorySize); SharedMemoryMapView controlChannelMemoryMapView = SharedMemoryMapView.CreateNew(ControlChannelMemoryMapName, SharedMemorySize); SharedMemoryMapView feedbackChannelMemoryMapView = SharedMemoryMapView.CreateNew(FeedbackChannelMemoryMapName, SharedMemorySize); // Create channel synchronization primitives. // NamedEvent controlChannelNamedEvent = NamedEvent.CreateOrOpen(ControlChannelSemaphoreName); NamedEvent feedbackChannelNamedEvent = NamedEvent.CreateOrOpen(FeedbackChannelSemaphoreName); return(new InterProcessMlosContext( globalMemoryRegionView, controlChannelMemoryMapView, feedbackChannelMemoryMapView, controlChannelNamedEvent, feedbackChannelNamedEvent)); }