/// <summary> /// Creates InterProcessMlosContext. /// </summary> /// <returns></returns> public static AnonymousMemoryMlosContext Create() { var fdExchangeServer = new FileDescriptorExchangeServer(FdUnitDomainSocketName, FdExchangeSemaphoreName); fdExchangeServer.HandleRequests(); MemoryRegionId memoryRegionId = new MemoryRegionId { Type = MemoryRegionType.Global }; SharedMemoryRegionView <MlosProxyInternal.GlobalMemoryRegion> globalMemoryRegionView = SharedMemoryRegionView.OpenAnonymousFromFileDescriptor <MlosProxyInternal.GlobalMemoryRegion>( fdExchangeServer.GetSharedMemoryFd(memoryRegionId), fdExchangeServer.GetSharedMemorySize(memoryRegionId)); memoryRegionId = new MemoryRegionId { Type = MemoryRegionType.ControlChannel }; SharedMemoryMapView controlChannelMemoryMapView = SharedMemoryMapView.OpenAnonymousFromFileDescriptor( fdExchangeServer.GetSharedMemoryFd(memoryRegionId), fdExchangeServer.GetSharedMemorySize(memoryRegionId)); memoryRegionId = new MemoryRegionId { Type = MemoryRegionType.FeedbackChannel }; SharedMemoryMapView feedbackChannelMemoryMapView = SharedMemoryMapView.OpenAnonymousFromFileDescriptor( fdExchangeServer.GetSharedMemoryFd(memoryRegionId), fdExchangeServer.GetSharedMemorySize(memoryRegionId)); memoryRegionId = new MemoryRegionId { Type = MemoryRegionType.SharedConfig }; SharedMemoryRegionView <MlosProxyInternal.SharedConfigMemoryRegion> sharedConfigMemoryRegionView = SharedMemoryRegionView.OpenAnonymousFromFileDescriptor <MlosProxyInternal.SharedConfigMemoryRegion>( fdExchangeServer.GetSharedMemoryFd(memoryRegionId), fdExchangeServer.GetSharedMemorySize(memoryRegionId)); // Create channel synchronization primitives. // NamedEvent controlChannelNamedEvent = NamedEvent.CreateOrOpen(ControlChannelSemaphoreName); NamedEvent feedbackChannelNamedEvent = NamedEvent.CreateOrOpen(FeedbackChannelSemaphoreName); return(new AnonymousMemoryMlosContext( globalMemoryRegionView, controlChannelMemoryMapView, feedbackChannelMemoryMapView, sharedConfigMemoryRegionView, controlChannelNamedEvent, feedbackChannelNamedEvent, fdExchangeServer)); }
/// <summary> /// Creates AnonymousMemoryMlosContext. /// </summary> /// <returns></returns> public static AnonymousMemoryMlosContext Create() { var fdExchangeServer = new FileDescriptorExchangeServer(DefaultSocketFolderPath); fdExchangeServer.HandleRequests(); SharedMemoryRegionView <MlosProxyInternal.GlobalMemoryRegion> globalMemoryRegionView = SharedMemoryRegionView.OpenFromFileDescriptor <MlosProxyInternal.GlobalMemoryRegion>( fdExchangeServer.GetSharedMemoryFd(GlobalMemoryMapName)); // Create channel synchronization primitives. // MlosProxyInternal.GlobalMemoryRegion globalMemoryRegion = globalMemoryRegionView.MemoryRegion(); // Control channel. // globalMemoryRegion.TryGetSharedMemoryName( new MlosInternal.MemoryRegionId { Type = MemoryRegionType.ControlChannel, Index = 0 }, out string sharedMemoryMapName); SharedMemoryMapView controlChannelMemoryMapView = SharedMemoryMapView.OpenFromFileDescriptor( fdExchangeServer.GetSharedMemoryFd(sharedMemoryMapName)); // Feedback channel. // globalMemoryRegion.TryGetSharedMemoryName( new MlosInternal.MemoryRegionId { Type = MemoryRegionType.FeedbackChannel, Index = 0 }, out sharedMemoryMapName); SharedMemoryMapView feedbackChannelMemoryMapView = SharedMemoryMapView.OpenFromFileDescriptor( fdExchangeServer.GetSharedMemoryFd(sharedMemoryMapName)); // Shared config. // globalMemoryRegion.TryGetSharedMemoryName( new MlosInternal.MemoryRegionId { Type = MemoryRegionType.SharedConfig, Index = 0 }, out sharedMemoryMapName); SharedMemoryMapView sharedConfigMemoryMapView = SharedMemoryMapView.OpenFromFileDescriptor( fdExchangeServer.GetSharedMemoryFd(sharedMemoryMapName)); var sharedConfigMemoryRegionView = new SharedMemoryRegionView <MlosProxyInternal.SharedConfigMemoryRegion>(sharedConfigMemoryMapView); globalMemoryRegion.TryOpenExisting( new MlosInternal.MemoryRegionId { Type = MemoryRegionType.ControlChannel, Index = 0, }, out NamedEvent controlChannelNamedEvent); globalMemoryRegion.TryOpenExisting( new MlosInternal.MemoryRegionId { Type = MemoryRegionType.FeedbackChannel, Index = 0, }, out NamedEvent feedbackChannelNamedEvent); return(new AnonymousMemoryMlosContext( globalMemoryRegionView, controlChannelMemoryMapView, feedbackChannelMemoryMapView, sharedConfigMemoryRegionView, controlChannelNamedEvent, feedbackChannelNamedEvent, fdExchangeServer)); }