#pragma warning disable CS8602 #pragma warning disable CS8603 #pragma warning disable CS8604 #if !UNITY_2018_3_OR_NEWER using Microsoft.Extensions.DependencyInjection; #endif using System; namespace MessagePipe { public static class GlobalMessagePipe { static IServiceProvider provider; static EventFactory eventFactory; static MessagePipeDiagnosticsInfo diagnosticsInfo; public static void SetProvider(IServiceProvider provider) { GlobalMessagePipe.provider = provider; GlobalMessagePipe.eventFactory = provider.GetRequiredService(); GlobalMessagePipe.diagnosticsInfo = provider.GetRequiredService(); } public static bool IsInitialized => provider != null; public static MessagePipeDiagnosticsInfo DiagnosticsInfo { get { ThrowIfNotInitialized(); return diagnosticsInfo; } } public static IPublisher GetPublisher() { ThrowIfNotInitialized(); return provider.GetRequiredService>(); } public static ISubscriber GetSubscriber() { ThrowIfNotInitialized(); return provider.GetRequiredService>(); } public static IAsyncPublisher GetAsyncPublisher() { ThrowIfNotInitialized(); return provider.GetRequiredService>(); } public static IAsyncSubscriber GetAsyncSubscriber() { ThrowIfNotInitialized(); return provider.GetRequiredService>(); } public static IPublisher GetPublisher() { ThrowIfNotInitialized(); return provider.GetRequiredService>(); } public static ISubscriber GetSubscriber() { ThrowIfNotInitialized(); return provider.GetRequiredService>(); } public static IAsyncPublisher GetAsyncPublisher() { ThrowIfNotInitialized(); return provider.GetRequiredService>(); } public static IAsyncSubscriber GetAsyncSubscriber() { ThrowIfNotInitialized(); return provider.GetRequiredService>(); } public static IRequestHandler GetRequestHandler() { ThrowIfNotInitialized(); return provider.GetRequiredService>(); } public static IAsyncRequestHandler GetAsyncRequestHandler() { ThrowIfNotInitialized(); return provider.GetRequiredService>(); } public static IRequestAllHandler GetRequestAllHandler() { ThrowIfNotInitialized(); return provider.GetRequiredService>(); } public static IAsyncRequestAllHandler GetAsyncRequestAllHandler() { ThrowIfNotInitialized(); return provider.GetRequiredService>(); } public static IBufferedPublisher GetBufferedPublisher() { ThrowIfNotInitialized(); return provider.GetRequiredService>(); } public static IBufferedSubscriber GetBufferedSubscriber() { ThrowIfNotInitialized(); return provider.GetRequiredService>(); } public static IBufferedAsyncPublisher GetAsyncBufferedPublisher() { ThrowIfNotInitialized(); return provider.GetRequiredService>(); } public static IBufferedAsyncSubscriber GetAsyncBufferedSubscriber() { ThrowIfNotInitialized(); return provider.GetRequiredService>(); } #if !UNITY_2018_3_OR_NEWER public static IDistributedPublisher GetDistributedPublisher() { ThrowIfNotInitialized(); return provider.GetRequiredService>(); } public static IDistributedSubscriber GetDistributedSubscriber() { ThrowIfNotInitialized(); return provider.GetRequiredService>(); } #endif public static (IDisposablePublisher, ISubscriber) CreateEvent() { ThrowIfNotInitialized(); return eventFactory.CreateEvent(); } public static (IDisposableAsyncPublisher, IAsyncSubscriber) CreateAsyncEvent() { ThrowIfNotInitialized(); return eventFactory.CreateAsyncEvent(); } public static (IDisposableBufferedPublisher, IBufferedSubscriber) CreateBufferedEvent(T initialValue) { ThrowIfNotInitialized(); return eventFactory.CreateBufferedEvent(initialValue); } public static (IDisposableBufferedAsyncPublisher, IBufferedAsyncSubscriber) CreateBufferedAsyncEvent(T initialValue) { ThrowIfNotInitialized(); return eventFactory.CreateBufferedAsyncEvent(initialValue); } // [MemberNotNull(nameof(provider), nameof(eventFactory), nameof(diagnosticsInfo))] static void ThrowIfNotInitialized() { if (provider == null || eventFactory == null || diagnosticsInfo == null) { throw new InvalidOperationException("Require to call `SetProvider` before use GlobalMessagePipe."); } } } }