123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- using Microsoft.Azure.SignalR.Management;
- using Microsoft.Extensions.Logging;
- using Microsoft.Extensions.Options;
- using StackExchange.Redis;
- using System;
- using System.Collections.Concurrent;
- namespace TEAMModelOS.SDK.DI
- {
- public class AzureSignalRFactory
- {
- private readonly IServiceProvider _services;
- private readonly IOptionsMonitor<AzureSignalRFactoryOptions> _optionsMonitor;
- private ConcurrentDictionary<string, ServiceManager> ServiceManagers { get; } = new();
- private readonly ILogger _logger;
- public AzureSignalRFactory(IServiceProvider services, IOptionsMonitor<AzureSignalRFactoryOptions> optionsMonitor, ILogger<AzureSignalRFactory> logger)
- {
- _services = services ?? throw new ArgumentNullException(nameof(services));
- _optionsMonitor = optionsMonitor ?? throw new ArgumentNullException(nameof(optionsMonitor));
- _logger = logger;
- }
- public ServiceManager GetServiceManager(string name = "Default")
- {
- try
- {
- var serviceManager = ServiceManagers.GetOrAdd(name, x =>
- // TODO(Mickey) : Signalr SDK 1.10.0之後,aud會無法擴充,會變成asrs.u.aud,會造成無法使用restAPI,故先降回舊版
- new ServiceManagerBuilder().WithOptions(option =>
- {
- option.ConnectionString = _optionsMonitor.Get(name).SignalRConnectionString;
- option.ServiceTransportType = ServiceTransportType.Persistent;
- }).BuildServiceManager());
- return serviceManager;
- }
- catch (Exception e)
- {
- _logger?.LogWarning(e, e.Message);
- return null;
- }
- }
- }
- }
|