10 changed files with 1165 additions and 1094 deletions
@ -1,455 +1,456 @@ |
|||||
<?xml version="1.0"?> |
<?xml version="1.0"?> |
||||
<doc> |
<doc> |
||||
<assembly> |
<assembly> |
||||
<name>LINGYUN.Abp.EventBus.CAP</name> |
<name>LINGYUN.Abp.EventBus.CAP</name> |
||||
</assembly> |
</assembly> |
||||
<members> |
<members> |
||||
<member name="T:DotNetCore.CAP.ConsumerServiceSelector"> |
<member name="T:DotNetCore.CAP.ConsumerServiceSelector"> |
||||
<summary> |
<summary> |
||||
消费者查找器 |
消费者查找器 |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="P:DotNetCore.CAP.ConsumerServiceSelector.CapOptions"> |
<member name="P:DotNetCore.CAP.ConsumerServiceSelector.CapOptions"> |
||||
<summary> |
<summary> |
||||
CAP配置 |
CAP配置 |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="P:DotNetCore.CAP.ConsumerServiceSelector.AbpDistributedEventBusOptions"> |
<member name="P:DotNetCore.CAP.ConsumerServiceSelector.AbpDistributedEventBusOptions"> |
||||
<summary> |
<summary> |
||||
Abp分布式事件配置 |
Abp分布式事件配置 |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="P:DotNetCore.CAP.ConsumerServiceSelector.ServiceProvider"> |
<member name="P:DotNetCore.CAP.ConsumerServiceSelector.ServiceProvider"> |
||||
<summary> |
<summary> |
||||
服务提供者 |
服务提供者 |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="M:DotNetCore.CAP.ConsumerServiceSelector.#ctor(System.IServiceProvider,Microsoft.Extensions.Options.IOptions{DotNetCore.CAP.CapOptions},Microsoft.Extensions.Options.IOptions{Volo.Abp.EventBus.Distributed.AbpDistributedEventBusOptions})"> |
<member name="M:DotNetCore.CAP.ConsumerServiceSelector.#ctor(System.IServiceProvider,Microsoft.Extensions.Options.IOptions{DotNetCore.CAP.CapOptions},Microsoft.Extensions.Options.IOptions{Volo.Abp.EventBus.Distributed.AbpDistributedEventBusOptions})"> |
||||
<summary> |
<summary> |
||||
Creates a new <see cref="T:DotNetCore.CAP.Internal.ConsumerServiceSelector" />. |
Creates a new <see cref="T:DotNetCore.CAP.Internal.ConsumerServiceSelector" />. |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="M:DotNetCore.CAP.ConsumerServiceSelector.FindConsumersFromInterfaceTypes(System.IServiceProvider)"> |
<member name="M:DotNetCore.CAP.ConsumerServiceSelector.FindConsumersFromInterfaceTypes(System.IServiceProvider)"> |
||||
<summary> |
<summary> |
||||
查找消费者集合 |
查找消费者集合 |
||||
</summary> |
</summary> |
||||
<param name="provider"></param> |
<param name="provider"></param> |
||||
<returns></returns> |
<returns></returns> |
||||
</member> |
</member> |
||||
<member name="M:DotNetCore.CAP.ConsumerServiceSelector.GetHandlerDescription(System.Type,System.Type)"> |
<member name="M:DotNetCore.CAP.ConsumerServiceSelector.GetHandlerDescription(System.Type,System.Type)"> |
||||
<summary> |
<summary> |
||||
获取事件处理器集合 |
获取事件处理器集合 |
||||
</summary> |
</summary> |
||||
<param name="eventType"></param> |
<param name="eventType"></param> |
||||
<param name="typeInfo"></param> |
<param name="typeInfo"></param> |
||||
<returns></returns> |
<returns></returns> |
||||
</member> |
</member> |
||||
<member name="T:DotNetCore.CAP.Processor.AbpCapExpiresMessageCleanupBackgroundWorker"> |
<member name="T:DotNetCore.CAP.Processor.AbpCapExpiresMessageCleanupBackgroundWorker"> |
||||
<summary> |
<summary> |
||||
过期消息清理任务 |
过期消息清理任务 |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="P:DotNetCore.CAP.Processor.AbpCapExpiresMessageCleanupBackgroundWorker.Options"> |
<member name="P:DotNetCore.CAP.Processor.AbpCapExpiresMessageCleanupBackgroundWorker.Options"> |
||||
<summary> |
<summary> |
||||
过期消息清理配置 |
过期消息清理配置 |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="P:DotNetCore.CAP.Processor.AbpCapExpiresMessageCleanupBackgroundWorker.Initializer"> |
<member name="P:DotNetCore.CAP.Processor.AbpCapExpiresMessageCleanupBackgroundWorker.Initializer"> |
||||
<summary> |
<summary> |
||||
Initializer |
Initializer |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="P:DotNetCore.CAP.Processor.AbpCapExpiresMessageCleanupBackgroundWorker.Storage"> |
<member name="P:DotNetCore.CAP.Processor.AbpCapExpiresMessageCleanupBackgroundWorker.Storage"> |
||||
<summary> |
<summary> |
||||
Storage |
Storage |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="M:DotNetCore.CAP.Processor.AbpCapExpiresMessageCleanupBackgroundWorker.#ctor(Volo.Abp.Threading.AbpAsyncTimer,DotNetCore.CAP.Persistence.IDataStorage,DotNetCore.CAP.Persistence.IStorageInitializer,Microsoft.Extensions.Options.IOptions{LINGYUN.Abp.EventBus.CAP.AbpCAPEventBusOptions},Microsoft.Extensions.DependencyInjection.IServiceScopeFactory)"> |
<member name="M:DotNetCore.CAP.Processor.AbpCapExpiresMessageCleanupBackgroundWorker.#ctor(Volo.Abp.Threading.AbpAsyncTimer,DotNetCore.CAP.Persistence.IDataStorage,DotNetCore.CAP.Persistence.IStorageInitializer,Microsoft.Extensions.Options.IOptions{LINGYUN.Abp.EventBus.CAP.AbpCAPEventBusOptions},Microsoft.Extensions.DependencyInjection.IServiceScopeFactory)"> |
||||
<summary> |
<summary> |
||||
创建过期消息清理任务 |
创建过期消息清理任务 |
||||
</summary> |
</summary> |
||||
<param name="timer"></param> |
<param name="timer"></param> |
||||
<param name="storage"></param> |
<param name="storage"></param> |
||||
<param name="initializer"></param> |
<param name="initializer"></param> |
||||
<param name="options"></param> |
<param name="options"></param> |
||||
<param name="serviceScopeFactory"></param> |
<param name="serviceScopeFactory"></param> |
||||
</member> |
</member> |
||||
<member name="M:DotNetCore.CAP.Processor.AbpCapExpiresMessageCleanupBackgroundWorker.DoWorkAsync(Volo.Abp.BackgroundWorkers.PeriodicBackgroundWorkerContext)"> |
<member name="M:DotNetCore.CAP.Processor.AbpCapExpiresMessageCleanupBackgroundWorker.DoWorkAsync(Volo.Abp.BackgroundWorkers.PeriodicBackgroundWorkerContext)"> |
||||
<summary> |
<summary> |
||||
异步执行任务 |
异步执行任务 |
||||
</summary> |
</summary> |
||||
<param name="workerContext"></param> |
<param name="workerContext"></param> |
||||
<returns></returns> |
<returns></returns> |
||||
</member> |
</member> |
||||
<member name="T:DotNetCore.CAP.Processor.AbpCapProcessingServer"> |
<member name="T:DotNetCore.CAP.Processor.AbpCapProcessingServer"> |
||||
<summary> |
<summary> |
||||
CapProcessingServer |
CapProcessingServer |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="M:DotNetCore.CAP.Processor.AbpCapProcessingServer.#ctor(Microsoft.Extensions.Logging.ILogger{DotNetCore.CAP.Processor.AbpCapProcessingServer},Microsoft.Extensions.Logging.ILoggerFactory,System.IServiceProvider)"> |
<member name="M:DotNetCore.CAP.Processor.AbpCapProcessingServer.#ctor(Microsoft.Extensions.Logging.ILogger{DotNetCore.CAP.Processor.AbpCapProcessingServer},Microsoft.Extensions.Logging.ILoggerFactory,System.IServiceProvider)"> |
||||
<summary> |
<summary> |
||||
CapProcessingServer |
CapProcessingServer |
||||
</summary> |
</summary> |
||||
<param name="logger"></param> |
<param name="logger"></param> |
||||
<param name="loggerFactory"></param> |
<param name="loggerFactory"></param> |
||||
<param name="provider"></param> |
<param name="provider"></param> |
||||
</member> |
</member> |
||||
<member name="M:DotNetCore.CAP.Processor.AbpCapProcessingServer.Start"> |
<member name="M:DotNetCore.CAP.Processor.AbpCapProcessingServer.Start(System.Threading.CancellationToken)"> |
||||
<summary> |
<summary> |
||||
Start |
Start |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="M:DotNetCore.CAP.Processor.AbpCapProcessingServer.Pulse"> |
<member name="M:DotNetCore.CAP.Processor.AbpCapProcessingServer.Pulse"> |
||||
<summary> |
<summary> |
||||
Pulse |
Pulse |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="M:DotNetCore.CAP.Processor.AbpCapProcessingServer.Dispose"> |
<member name="M:DotNetCore.CAP.Processor.AbpCapProcessingServer.Dispose"> |
||||
<summary> |
<summary> |
||||
Dispose |
Dispose |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="T:LINGYUN.Abp.EventBus.CAP.AbpCAPEventBusModule"> |
<member name="T:LINGYUN.Abp.EventBus.CAP.AbpCAPEventBusModule"> |
||||
<summary> |
<summary> |
||||
AbpCAPEventBusModule |
AbpCAPEventBusModule |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="M:LINGYUN.Abp.EventBus.CAP.AbpCAPEventBusModule.ConfigureServices(Volo.Abp.Modularity.ServiceConfigurationContext)"> |
<member name="M:LINGYUN.Abp.EventBus.CAP.AbpCAPEventBusModule.ConfigureServices(Volo.Abp.Modularity.ServiceConfigurationContext)"> |
||||
<summary> |
<summary> |
||||
ConfigureServices |
ConfigureServices |
||||
</summary> |
</summary> |
||||
<param name="context"></param> |
<param name="context"></param> |
||||
</member> |
</member> |
||||
<member name="M:LINGYUN.Abp.EventBus.CAP.AbpCAPEventBusModule.OnApplicationInitialization(Volo.Abp.ApplicationInitializationContext)"> |
<member name="M:LINGYUN.Abp.EventBus.CAP.AbpCAPEventBusModule.OnApplicationInitialization(Volo.Abp.ApplicationInitializationContext)"> |
||||
<summary> |
<summary> |
||||
OnApplicationInitialization |
OnApplicationInitialization |
||||
</summary> |
</summary> |
||||
<param name="context"></param> |
<param name="context"></param> |
||||
</member> |
</member> |
||||
<member name="T:LINGYUN.Abp.EventBus.CAP.AbpCAPEventBusOptions"> |
<member name="T:LINGYUN.Abp.EventBus.CAP.AbpCAPEventBusOptions"> |
||||
<summary> |
<summary> |
||||
过期消息清理配置项 |
过期消息清理配置项 |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="P:LINGYUN.Abp.EventBus.CAP.AbpCAPEventBusOptions.NotifyFailedCallback"> |
<member name="P:LINGYUN.Abp.EventBus.CAP.AbpCAPEventBusOptions.NotifyFailedCallback"> |
||||
<summary> |
<summary> |
||||
发布消息处理失败通知 |
发布消息处理失败通知 |
||||
default: false |
default: false |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="P:LINGYUN.Abp.EventBus.CAP.AbpCAPEventBusOptions.CleanUpExpiresMessageBatch"> |
<member name="P:LINGYUN.Abp.EventBus.CAP.AbpCAPEventBusOptions.CleanUpExpiresMessageBatch"> |
||||
<summary> |
<summary> |
||||
批量清理数量 |
批量清理数量 |
||||
default: 1000 |
default: 1000 |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="P:LINGYUN.Abp.EventBus.CAP.AbpCAPEventBusOptions.CleanUpExpiresMessageInterval"> |
<member name="P:LINGYUN.Abp.EventBus.CAP.AbpCAPEventBusOptions.CleanUpExpiresMessageInterval"> |
||||
<summary> |
<summary> |
||||
执行间隔(ms) |
执行间隔(ms) |
||||
default: 3600000 (1 hours) |
default: 3600000 (1 hours) |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="T:LINGYUN.Abp.EventBus.CAP.AbpCAPExecutionFailedException"> |
<member name="T:LINGYUN.Abp.EventBus.CAP.AbpCAPExecutionFailedException"> |
||||
<summary> |
<summary> |
||||
AbpECAPExecutionFailedException |
AbpECAPExecutionFailedException |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="P:LINGYUN.Abp.EventBus.CAP.AbpCAPExecutionFailedException.MessageType"> |
<member name="P:LINGYUN.Abp.EventBus.CAP.AbpCAPExecutionFailedException.MessageType"> |
||||
<summary> |
<summary> |
||||
MessageType |
MessageType |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="P:LINGYUN.Abp.EventBus.CAP.AbpCAPExecutionFailedException.Origin"> |
<member name="P:LINGYUN.Abp.EventBus.CAP.AbpCAPExecutionFailedException.Origin"> |
||||
<summary> |
<summary> |
||||
Message |
Message |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="M:LINGYUN.Abp.EventBus.CAP.AbpCAPExecutionFailedException.#ctor(DotNetCore.CAP.Messages.MessageType,DotNetCore.CAP.Messages.Message)"> |
<member name="M:LINGYUN.Abp.EventBus.CAP.AbpCAPExecutionFailedException.#ctor(DotNetCore.CAP.Messages.MessageType,DotNetCore.CAP.Messages.Message)"> |
||||
<summary> |
<summary> |
||||
constructor |
constructor |
||||
</summary> |
</summary> |
||||
<param name="messageType"></param> |
<param name="messageType"></param> |
||||
<param name="origin"></param> |
<param name="origin"></param> |
||||
</member> |
</member> |
||||
<member name="M:LINGYUN.Abp.EventBus.CAP.AbpCAPExecutionFailedException.#ctor(DotNetCore.CAP.Messages.MessageType,DotNetCore.CAP.Messages.Message,System.String)"> |
<member name="M:LINGYUN.Abp.EventBus.CAP.AbpCAPExecutionFailedException.#ctor(DotNetCore.CAP.Messages.MessageType,DotNetCore.CAP.Messages.Message,System.String)"> |
||||
<summary> |
<summary> |
||||
constructor |
constructor |
||||
</summary> |
</summary> |
||||
<param name="messageType"></param> |
<param name="messageType"></param> |
||||
<param name="origin"></param> |
<param name="origin"></param> |
||||
<param name="message"></param> |
<param name="message"></param> |
||||
</member> |
</member> |
||||
<member name="M:LINGYUN.Abp.EventBus.CAP.AbpCAPExecutionFailedException.#ctor(DotNetCore.CAP.Messages.MessageType,DotNetCore.CAP.Messages.Message,System.String,System.Exception)"> |
<member name="M:LINGYUN.Abp.EventBus.CAP.AbpCAPExecutionFailedException.#ctor(DotNetCore.CAP.Messages.MessageType,DotNetCore.CAP.Messages.Message,System.String,System.Exception)"> |
||||
<summary> |
<summary> |
||||
constructor |
constructor |
||||
</summary> |
</summary> |
||||
<param name="messageType"></param> |
<param name="messageType"></param> |
||||
<param name="origin"></param> |
<param name="origin"></param> |
||||
<param name="message"></param> |
<param name="message"></param> |
||||
<param name="innerException"></param> |
<param name="innerException"></param> |
||||
</member> |
</member> |
||||
<member name="T:LINGYUN.Abp.EventBus.CAP.AbpCAPMessageExtensions"> |
<member name="T:LINGYUN.Abp.EventBus.CAP.AbpCAPMessageExtensions"> |
||||
<summary> |
<summary> |
||||
CAP消息扩展 |
CAP消息扩展 |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="M:LINGYUN.Abp.EventBus.CAP.AbpCAPMessageExtensions.TryGetTenantId(DotNetCore.CAP.Messages.Message,System.Nullable{System.Guid}@)"> |
<member name="M:LINGYUN.Abp.EventBus.CAP.AbpCAPMessageExtensions.TryGetTenantId(DotNetCore.CAP.Messages.Message,System.Nullable{System.Guid}@)"> |
||||
<summary> |
<summary> |
||||
尝试获取消息标头中的租户标识 |
尝试获取消息标头中的租户标识 |
||||
</summary> |
</summary> |
||||
<param name="message"></param> |
<param name="message"></param> |
||||
<param name="tenantId"></param> |
<param name="tenantId"></param> |
||||
<returns></returns> |
<returns></returns> |
||||
</member> |
</member> |
||||
<member name="M:LINGYUN.Abp.EventBus.CAP.AbpCAPMessageExtensions.GetTenantIdOrNull(DotNetCore.CAP.Messages.Message)"> |
<member name="M:LINGYUN.Abp.EventBus.CAP.AbpCAPMessageExtensions.GetTenantIdOrNull(DotNetCore.CAP.Messages.Message)"> |
||||
<summary> |
<summary> |
||||
获取消息标头中的租户标识 |
获取消息标头中的租户标识 |
||||
</summary> |
</summary> |
||||
<param name="message"></param> |
<param name="message"></param> |
||||
<returns></returns> |
<returns></returns> |
||||
</member> |
</member> |
||||
<member name="T:LINGYUN.Abp.EventBus.CAP.AbpCAPSubscribeInvoker"> |
<member name="T:LINGYUN.Abp.EventBus.CAP.AbpCAPSubscribeInvoker"> |
||||
<summary> |
<summary> |
||||
重写 ISubscribeInvoker 实现 Abp 租户集成 |
重写 ISubscribeInvoker 实现 Abp 租户集成 |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="M:LINGYUN.Abp.EventBus.CAP.AbpCAPSubscribeInvoker.#ctor(Microsoft.Extensions.Logging.ILoggerFactory,System.IServiceProvider,DotNetCore.CAP.Serialization.ISerializer,Volo.Abp.MultiTenancy.ICurrentTenant)"> |
<member name="M:LINGYUN.Abp.EventBus.CAP.AbpCAPSubscribeInvoker.#ctor(Microsoft.Extensions.Logging.ILoggerFactory,System.IServiceProvider,DotNetCore.CAP.Serialization.ISerializer,Volo.Abp.MultiTenancy.ICurrentTenant)"> |
||||
<summary> |
<summary> |
||||
AbpCAPSubscribeInvoker |
AbpCAPSubscribeInvoker |
||||
</summary> |
</summary> |
||||
<param name="loggerFactory"></param> |
<param name="loggerFactory"></param> |
||||
<param name="serviceProvider"></param> |
<param name="serviceProvider"></param> |
||||
<param name="serializer"></param> |
<param name="serializer"></param> |
||||
<param name="currentTenant"></param> |
<param name="currentTenant"></param> |
||||
</member> |
</member> |
||||
<member name="M:LINGYUN.Abp.EventBus.CAP.AbpCAPSubscribeInvoker.InvokeAsync(DotNetCore.CAP.Internal.ConsumerContext,System.Threading.CancellationToken)"> |
<member name="M:LINGYUN.Abp.EventBus.CAP.AbpCAPSubscribeInvoker.InvokeAsync(DotNetCore.CAP.Internal.ConsumerContext,System.Threading.CancellationToken)"> |
||||
<summary> |
<summary> |
||||
调用订阅者方法 |
调用订阅者方法 |
||||
</summary> |
</summary> |
||||
<param name="context"></param> |
<param name="context"></param> |
||||
<param name="cancellationToken"></param> |
<param name="cancellationToken"></param> |
||||
<returns></returns> |
<returns></returns> |
||||
</member> |
</member> |
||||
<member name="M:LINGYUN.Abp.EventBus.CAP.AbpCAPSubscribeInvoker.GetInstance(System.IServiceProvider,DotNetCore.CAP.Internal.ConsumerContext)"> |
<member name="M:LINGYUN.Abp.EventBus.CAP.AbpCAPSubscribeInvoker.GetInstance(System.IServiceProvider,DotNetCore.CAP.Internal.ConsumerContext)"> |
||||
<summary> |
<summary> |
||||
获取事件处理类实例 |
获取事件处理类实例 |
||||
</summary> |
</summary> |
||||
<param name="provider"></param> |
<param name="provider"></param> |
||||
<param name="context"></param> |
<param name="context"></param> |
||||
<returns></returns> |
<returns></returns> |
||||
</member> |
</member> |
||||
<member name="M:LINGYUN.Abp.EventBus.CAP.AbpCAPSubscribeInvoker.ExecuteWithParameterAsync(LINGYUN.Abp.EventBus.CAP.Internal.ObjectMethodExecutor,System.Object,System.Object[])"> |
<member name="M:LINGYUN.Abp.EventBus.CAP.AbpCAPSubscribeInvoker.ExecuteWithParameterAsync(LINGYUN.Abp.EventBus.CAP.Internal.ObjectMethodExecutor,System.Object,System.Object[])"> |
||||
<summary> |
<summary> |
||||
通过给定的类型实例与参数调用订阅者方法 |
通过给定的类型实例与参数调用订阅者方法 |
||||
</summary> |
</summary> |
||||
<param name="executor"></param> |
<param name="executor"></param> |
||||
<param name="class"></param> |
<param name="class"></param> |
||||
<param name="parameter"></param> |
<param name="parameter"></param> |
||||
<returns></returns> |
<returns></returns> |
||||
</member> |
</member> |
||||
<member name="T:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus"> |
<member name="T:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus"> |
||||
<summary> |
<summary> |
||||
CAP分布式事件总线 |
CAP分布式事件总线 |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="P:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.AbpDistributedEventBusOptions"> |
<member name="P:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.AbpDistributedEventBusOptions"> |
||||
<summary> |
<summary> |
||||
Abp分布式事件总线配置 |
Abp分布式事件总线配置 |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="F:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.CapPublisher"> |
<member name="F:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.CapPublisher"> |
||||
<summary> |
<summary> |
||||
CAP消息发布接口 |
CAP消息发布接口 |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="P:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.CustomDistributedEventSubscriber"> |
<member name="P:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.CustomDistributedEventSubscriber"> |
||||
<summary> |
<summary> |
||||
自定义事件注册接口 |
自定义事件注册接口 |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="P:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.HandlerFactories"> |
<member name="P:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.HandlerFactories"> |
||||
<summary> |
<summary> |
||||
本地事件处理器工厂对象集合 |
本地事件处理器工厂对象集合 |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="P:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.EventTypes"> |
<member name="P:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.EventTypes"> |
||||
<summary> |
<summary> |
||||
本地事件集合 |
本地事件集合 |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="P:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.CurrentUser"> |
<member name="P:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.CurrentUser"> |
||||
<summary> |
<summary> |
||||
当前用户 |
当前用户 |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="P:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.CurrentClient"> |
<member name="P:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.CurrentClient"> |
||||
<summary> |
<summary> |
||||
当前客户端 |
当前客户端 |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="P:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.CancellationTokenProvider"> |
<member name="P:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.CancellationTokenProvider"> |
||||
<summary> |
<summary> |
||||
取消令牌 |
取消令牌 |
||||
</summary> |
</summary> |
||||
</member> |
</member> |
||||
<member name="M:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.#ctor(Microsoft.Extensions.DependencyInjection.IServiceScopeFactory,Microsoft.Extensions.Options.IOptions{Volo.Abp.EventBus.Distributed.AbpDistributedEventBusOptions},DotNetCore.CAP.ICapPublisher,Volo.Abp.Users.ICurrentUser,Volo.Abp.Clients.ICurrentClient,Volo.Abp.MultiTenancy.ICurrentTenant,Volo.Abp.Threading.ICancellationTokenProvider,LINGYUN.Abp.EventBus.CAP.ICustomDistributedEventSubscriber)"> |
<member name="M:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.#ctor(Microsoft.Extensions.DependencyInjection.IServiceScopeFactory,Microsoft.Extensions.Options.IOptions{Volo.Abp.EventBus.Distributed.AbpDistributedEventBusOptions},DotNetCore.CAP.ICapPublisher,Volo.Abp.Users.ICurrentUser,Volo.Abp.Clients.ICurrentClient,Volo.Abp.MultiTenancy.ICurrentTenant,Volo.Abp.EventBus.IEventErrorHandler,Volo.Abp.Threading.ICancellationTokenProvider,LINGYUN.Abp.EventBus.CAP.ICustomDistributedEventSubscriber)"> |
||||
<summary> |
<summary> |
||||
constructor |
constructor |
||||
</summary> |
</summary> |
||||
<param name="serviceScopeFactory"></param> |
<param name="serviceScopeFactory"></param> |
||||
<param name="distributedEventBusOptions"></param> |
<param name="distributedEventBusOptions"></param> |
||||
<param name="capPublisher"></param> |
<param name="capPublisher"></param> |
||||
<param name="currentUser"></param> |
<param name="currentUser"></param> |
||||
<param name="currentTenant"></param> |
<param name="currentClient"></param> |
||||
<param name="currentClient"></param> |
<param name="currentTenant"></param> |
||||
<param name="cancellationTokenProvider"></param> |
<param name="eventErrorHandler"></param> |
||||
<param name="customDistributedEventSubscriber"></param> |
<param name="cancellationTokenProvider"></param> |
||||
</member> |
<param name="customDistributedEventSubscriber"></param> |
||||
<member name="M:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.Subscribe(System.Type,Volo.Abp.EventBus.IEventHandlerFactory)"> |
</member> |
||||
<summary> |
<member name="M:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.Subscribe(System.Type,Volo.Abp.EventBus.IEventHandlerFactory)"> |
||||
订阅事件 |
<summary> |
||||
</summary> |
订阅事件 |
||||
<param name="eventType"></param> |
</summary> |
||||
<param name="factory"></param> |
<param name="eventType"></param> |
||||
<returns></returns> |
<param name="factory"></param> |
||||
</member> |
<returns></returns> |
||||
<member name="M:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.Unsubscribe``1(System.Func{``0,System.Threading.Tasks.Task})"> |
</member> |
||||
<summary> |
<member name="M:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.Unsubscribe``1(System.Func{``0,System.Threading.Tasks.Task})"> |
||||
退订事件 |
<summary> |
||||
</summary> |
退订事件 |
||||
<typeparam name="TEvent">事件类型</typeparam> |
</summary> |
||||
<param name="action"></param> |
<typeparam name="TEvent">事件类型</typeparam> |
||||
</member> |
<param name="action"></param> |
||||
<member name="M:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.Unsubscribe(System.Type,Volo.Abp.EventBus.IEventHandler)"> |
</member> |
||||
<summary> |
<member name="M:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.Unsubscribe(System.Type,Volo.Abp.EventBus.IEventHandler)"> |
||||
退订事件 |
<summary> |
||||
</summary> |
退订事件 |
||||
<param name="eventType">事件类型</param> |
</summary> |
||||
<param name="handler">事件处理器</param> |
<param name="eventType">事件类型</param> |
||||
</member> |
<param name="handler">事件处理器</param> |
||||
<member name="M:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.Unsubscribe(System.Type,Volo.Abp.EventBus.IEventHandlerFactory)"> |
</member> |
||||
<summary> |
<member name="M:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.Unsubscribe(System.Type,Volo.Abp.EventBus.IEventHandlerFactory)"> |
||||
退订事件 |
<summary> |
||||
</summary> |
退订事件 |
||||
<param name="eventType">事件类型</param> |
</summary> |
||||
<param name="factory">事件处理器工厂</param> |
<param name="eventType">事件类型</param> |
||||
</member> |
<param name="factory">事件处理器工厂</param> |
||||
<member name="M:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.UnsubscribeAll(System.Type)"> |
</member> |
||||
<summary> |
<member name="M:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.UnsubscribeAll(System.Type)"> |
||||
退订所有事件 |
<summary> |
||||
</summary> |
退订所有事件 |
||||
<param name="eventType">事件类型</param> |
</summary> |
||||
</member> |
<param name="eventType">事件类型</param> |
||||
<member name="M:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.Subscribe``1(Volo.Abp.EventBus.Distributed.IDistributedEventHandler{``0})"> |
</member> |
||||
<summary> |
<member name="M:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.Subscribe``1(Volo.Abp.EventBus.Distributed.IDistributedEventHandler{``0})"> |
||||
订阅事件 |
<summary> |
||||
</summary> |
订阅事件 |
||||
<typeparam name="TEvent">事件类型</typeparam> |
</summary> |
||||
<param name="handler">事件处理器</param> |
<typeparam name="TEvent">事件类型</typeparam> |
||||
<returns></returns> |
<param name="handler">事件处理器</param> |
||||
</member> |
<returns></returns> |
||||
<member name="M:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.PublishAsync(System.Type,System.Object)"> |
</member> |
||||
<summary> |
<member name="M:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.PublishAsync(System.Type,System.Object)"> |
||||
发布事件 |
<summary> |
||||
</summary> |
发布事件 |
||||
<param name="eventType">事件类型</param> |
</summary> |
||||
<param name="eventData">事件数据对象</param> |
<param name="eventType">事件类型</param> |
||||
<returns></returns> |
<param name="eventData">事件数据对象</param> |
||||
</member> |
<returns></returns> |
||||
<member name="M:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.GetHandlerFactories(System.Type)"> |
</member> |
||||
<summary> |
<member name="M:LINGYUN.Abp.EventBus.CAP.CAPDistributedEventBus.GetHandlerFactories(System.Type)"> |
||||
获取事件处理器工厂列表 |
<summary> |
||||
</summary> |
获取事件处理器工厂列表 |
||||
<param name="eventType"></param> |
</summary> |
||||
<returns></returns> |
<param name="eventType"></param> |
||||
</member> |
<returns></returns> |
||||
<member name="T:LINGYUN.Abp.EventBus.CAP.ICustomDistributedEventSubscriber"> |
</member> |
||||
<summary> |
<member name="T:LINGYUN.Abp.EventBus.CAP.ICustomDistributedEventSubscriber"> |
||||
自定义事件订阅者 |
<summary> |
||||
</summary> |
自定义事件订阅者 |
||||
</member> |
</summary> |
||||
<member name="M:LINGYUN.Abp.EventBus.CAP.ICustomDistributedEventSubscriber.Subscribe(System.Type,Volo.Abp.EventBus.IEventHandlerFactory)"> |
</member> |
||||
<summary> |
<member name="M:LINGYUN.Abp.EventBus.CAP.ICustomDistributedEventSubscriber.Subscribe(System.Type,Volo.Abp.EventBus.IEventHandlerFactory)"> |
||||
订阅事件 |
<summary> |
||||
</summary> |
订阅事件 |
||||
<param name="eventType"></param> |
</summary> |
||||
<param name="factory"></param> |
<param name="eventType"></param> |
||||
</member> |
<param name="factory"></param> |
||||
<member name="M:LINGYUN.Abp.EventBus.CAP.ICustomDistributedEventSubscriber.UnSubscribe(System.Type,Volo.Abp.EventBus.IEventHandlerFactory)"> |
</member> |
||||
<summary> |
<member name="M:LINGYUN.Abp.EventBus.CAP.ICustomDistributedEventSubscriber.UnSubscribe(System.Type,Volo.Abp.EventBus.IEventHandlerFactory)"> |
||||
取消订阅 |
<summary> |
||||
</summary> |
取消订阅 |
||||
<param name="eventType"></param> |
</summary> |
||||
<param name="factory"></param> |
<param name="eventType"></param> |
||||
</member> |
<param name="factory"></param> |
||||
<member name="M:LINGYUN.Abp.EventBus.CAP.Internal.ObjectMethodExecutor.Execute(System.Object,System.Object[])"> |
</member> |
||||
<summary> |
<member name="M:LINGYUN.Abp.EventBus.CAP.Internal.ObjectMethodExecutor.Execute(System.Object,System.Object[])"> |
||||
Executes the configured method on <paramref name="target" />. This can be used whether or not |
<summary> |
||||
the configured method is asynchronous. |
Executes the configured method on <paramref name="target" />. This can be used whether or not |
||||
</summary> |
the configured method is asynchronous. |
||||
<remarks> |
</summary> |
||||
Even if the target method is asynchronous, it's desirable to invoke it using Execute rather than |
<remarks> |
||||
ExecuteAsync if you know at compile time what the return type is, because then you can directly |
Even if the target method is asynchronous, it's desirable to invoke it using Execute rather than |
||||
"await" that value (via a cast), and then the generated code will be able to reference the |
ExecuteAsync if you know at compile time what the return type is, because then you can directly |
||||
resulting awaitable as a value-typed variable. If you use ExecuteAsync instead, the generated |
"await" that value (via a cast), and then the generated code will be able to reference the |
||||
code will have to treat the resulting awaitable as a boxed object, because it doesn't know at |
resulting awaitable as a value-typed variable. If you use ExecuteAsync instead, the generated |
||||
compile time what type it would be. |
code will have to treat the resulting awaitable as a boxed object, because it doesn't know at |
||||
</remarks> |
compile time what type it would be. |
||||
<param name="target">The object whose method is to be executed.</param> |
</remarks> |
||||
<param name="parameters">Parameters to pass to the method.</param> |
<param name="target">The object whose method is to be executed.</param> |
||||
<returns>The method return value.</returns> |
<param name="parameters">Parameters to pass to the method.</param> |
||||
</member> |
<returns>The method return value.</returns> |
||||
<member name="M:LINGYUN.Abp.EventBus.CAP.Internal.ObjectMethodExecutor.ExecuteAsync(System.Object,System.Object[])"> |
</member> |
||||
<summary> |
<member name="M:LINGYUN.Abp.EventBus.CAP.Internal.ObjectMethodExecutor.ExecuteAsync(System.Object,System.Object[])"> |
||||
Executes the configured method on <paramref name="target" />. This can only be used if the configured |
<summary> |
||||
method is asynchronous. |
Executes the configured method on <paramref name="target" />. This can only be used if the configured |
||||
</summary> |
method is asynchronous. |
||||
<remarks> |
</summary> |
||||
If you don't know at compile time the type of the method's returned awaitable, you can use ExecuteAsync, |
<remarks> |
||||
which supplies an awaitable-of-object. This always works, but can incur several extra heap allocations |
If you don't know at compile time the type of the method's returned awaitable, you can use ExecuteAsync, |
||||
as compared with using Execute and then using "await" on the result value typecasted to the known |
which supplies an awaitable-of-object. This always works, but can incur several extra heap allocations |
||||
awaitable type. The possible extra heap allocations are for: |
as compared with using Execute and then using "await" on the result value typecasted to the known |
||||
1. The custom awaitable (though usually there's a heap allocation for this anyway, since normally |
awaitable type. The possible extra heap allocations are for: |
||||
it's a reference type, and you normally create a new instance per call). |
1. The custom awaitable (though usually there's a heap allocation for this anyway, since normally |
||||
2. The custom awaiter (whether or not it's a value type, since if it's not, you need a new instance |
it's a reference type, and you normally create a new instance per call). |
||||
of it, and if it is, it will have to be boxed so the calling code can reference it as an object). |
2. The custom awaiter (whether or not it's a value type, since if it's not, you need a new instance |
||||
3. The async result value, if it's a value type (it has to be boxed as an object, since the calling |
of it, and if it is, it will have to be boxed so the calling code can reference it as an object). |
||||
code doesn't know what type it's going to be). |
3. The async result value, if it's a value type (it has to be boxed as an object, since the calling |
||||
</remarks> |
code doesn't know what type it's going to be). |
||||
<param name="target">The object whose method is to be executed.</param> |
</remarks> |
||||
<param name="parameters">Parameters to pass to the method.</param> |
<param name="target">The object whose method is to be executed.</param> |
||||
<returns>An object that you can "await" to get the method return value.</returns> |
<param name="parameters">Parameters to pass to the method.</param> |
||||
</member> |
<returns>An object that you can "await" to get the method return value.</returns> |
||||
<member name="T:LINGYUN.Abp.EventBus.CAP.Internal.ObjectMethodExecutorAwaitable"> |
</member> |
||||
<summary> |
<member name="T:LINGYUN.Abp.EventBus.CAP.Internal.ObjectMethodExecutorAwaitable"> |
||||
Provides a common awaitable structure that <see cref="M:LINGYUN.Abp.EventBus.CAP.Internal.ObjectMethodExecutor.ExecuteAsync(System.Object,System.Object[])" /> can |
<summary> |
||||
return, regardless of whether the underlying value is a System.Task, an FSharpAsync, or an |
Provides a common awaitable structure that <see cref="M:LINGYUN.Abp.EventBus.CAP.Internal.ObjectMethodExecutor.ExecuteAsync(System.Object,System.Object[])" /> can |
||||
application-defined custom awaitable. |
return, regardless of whether the underlying value is a System.Task, an FSharpAsync, or an |
||||
</summary> |
application-defined custom awaitable. |
||||
</member> |
</summary> |
||||
<member name="T:LINGYUN.Abp.EventBus.CAP.Internal.ObjectMethodExecutorFSharpSupport"> |
</member> |
||||
<summary> |
<member name="T:LINGYUN.Abp.EventBus.CAP.Internal.ObjectMethodExecutorFSharpSupport"> |
||||
Helper for detecting whether a given type is FSharpAsync`1, and if so, supplying |
<summary> |
||||
an <see cref="T:System.Linq.Expressions.Expression" /> for mapping instances of that type to a C# awaitable. |
Helper for detecting whether a given type is FSharpAsync`1, and if so, supplying |
||||
</summary> |
an <see cref="T:System.Linq.Expressions.Expression" /> for mapping instances of that type to a C# awaitable. |
||||
<remarks> |
</summary> |
||||
The main design goal here is to avoid taking a compile-time dependency on |
<remarks> |
||||
FSharp.Core.dll, because non-F# applications wouldn't use it. So all the references |
The main design goal here is to avoid taking a compile-time dependency on |
||||
to FSharp types have to be constructed dynamically at runtime. |
FSharp.Core.dll, because non-F# applications wouldn't use it. So all the references |
||||
</remarks> |
to FSharp types have to be constructed dynamically at runtime. |
||||
</member> |
</remarks> |
||||
<member name="T:Microsoft.Extensions.DependencyInjection.ServiceCollectionExtensions"> |
</member> |
||||
<summary> |
<member name="T:Microsoft.Extensions.DependencyInjection.ServiceCollectionExtensions"> |
||||
CAP ServiceCollectionExtensions |
<summary> |
||||
</summary> |
CAP ServiceCollectionExtensions |
||||
</member> |
</summary> |
||||
<member name="M:Microsoft.Extensions.DependencyInjection.ServiceCollectionExtensions.AddCAPEventBus(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{DotNetCore.CAP.CapOptions})"> |
</member> |
||||
<summary> |
<member name="M:Microsoft.Extensions.DependencyInjection.ServiceCollectionExtensions.AddCAPEventBus(Microsoft.Extensions.DependencyInjection.IServiceCollection,System.Action{DotNetCore.CAP.CapOptions})"> |
||||
Adds and configures the consistence services for the consistency. |
<summary> |
||||
</summary> |
Adds and configures the consistence services for the consistency. |
||||
<param name="services"></param> |
</summary> |
||||
<param name="capAction"></param> |
<param name="services"></param> |
||||
<returns></returns> |
<param name="capAction"></param> |
||||
</member> |
<returns></returns> |
||||
</members> |
</member> |
||||
</doc> |
</members> |
||||
|
</doc> |
||||
|
|||||
@ -1,70 +1,71 @@ |
|||||
using LINGYUN.Abp.IM.Messages; |
using LINGYUN.Abp.IM.Messages; |
||||
using LINGYUN.Abp.IM.SignalR.Hubs; |
using LINGYUN.Abp.IM.SignalR.Hubs; |
||||
using LINGYUN.Abp.RealTime.Client; |
using LINGYUN.Abp.RealTime.Client; |
||||
using Microsoft.AspNetCore.SignalR; |
using Microsoft.AspNetCore.SignalR; |
||||
using Microsoft.Extensions.Logging; |
using Microsoft.Extensions.Logging; |
||||
using Microsoft.Extensions.Options; |
using Microsoft.Extensions.Options; |
||||
using System; |
using System; |
||||
using System.Collections.Immutable; |
using System.Collections.Immutable; |
||||
using System.Linq; |
using System.Linq; |
||||
using System.Threading.Tasks; |
using System.Threading.Tasks; |
||||
|
using Volo.Abp.DependencyInjection; |
||||
namespace LINGYUN.Abp.IM.SignalR.Messages |
|
||||
{ |
namespace LINGYUN.Abp.IM.SignalR.Messages |
||||
public class SignalRMessageSenderProvider : MessageSenderProviderBase |
{ |
||||
{ |
public class SignalRMessageSenderProvider : MessageSenderProviderBase |
||||
public override string Name => "SignalR"; |
{ |
||||
private readonly AbpIMSignalROptions _options; |
public override string Name => "SignalR"; |
||||
|
private readonly AbpIMSignalROptions _options; |
||||
private readonly IOnlineClientManager _onlineClientManager; |
|
||||
|
private readonly IOnlineClientManager _onlineClientManager; |
||||
private readonly IHubContext<MessagesHub> _hubContext; |
|
||||
|
private readonly IHubContext<MessagesHub> _hubContext; |
||||
public SignalRMessageSenderProvider( |
|
||||
IOnlineClientManager onlineClientManager, |
public SignalRMessageSenderProvider( |
||||
IHubContext<MessagesHub> hubContext, |
IOnlineClientManager onlineClientManager, |
||||
IServiceProvider serviceProvider, |
IHubContext<MessagesHub> hubContext, |
||||
IOptions<AbpIMSignalROptions> options) |
IAbpLazyServiceProvider serviceProvider, |
||||
: base(serviceProvider) |
IOptions<AbpIMSignalROptions> options) |
||||
{ |
: base(serviceProvider) |
||||
_options = options.Value; |
{ |
||||
_hubContext = hubContext; |
_options = options.Value; |
||||
_onlineClientManager = onlineClientManager; |
_hubContext = hubContext; |
||||
} |
_onlineClientManager = onlineClientManager; |
||||
|
} |
||||
protected override async Task SendMessageToGroupAsync(ChatMessage chatMessage) |
|
||||
{ |
protected override async Task SendMessageToGroupAsync(ChatMessage chatMessage) |
||||
var signalRClient = _hubContext.Clients.Group(chatMessage.GroupId); |
{ |
||||
if (signalRClient == null) |
var signalRClient = _hubContext.Clients.Group(chatMessage.GroupId); |
||||
{ |
if (signalRClient == null) |
||||
Logger.LogDebug("Can not get group " + chatMessage.GroupId + " from SignalR hub!"); |
{ |
||||
return; |
Logger.LogDebug("Can not get group " + chatMessage.GroupId + " from SignalR hub!"); |
||||
} |
return; |
||||
|
} |
||||
await signalRClient.SendAsync(_options.GetChatMessageMethod, chatMessage); |
|
||||
} |
await signalRClient.SendAsync(_options.GetChatMessageMethod, chatMessage); |
||||
|
} |
||||
protected override async Task SendMessageToUserAsync(ChatMessage chatMessage) |
|
||||
{ |
protected override async Task SendMessageToUserAsync(ChatMessage chatMessage) |
||||
try |
{ |
||||
{ |
try |
||||
var onlineClientContext = new OnlineClientContext(chatMessage.TenantId, chatMessage.ToUserId.Value); |
{ |
||||
var onlineClients = _onlineClientManager.GetAllByContext(onlineClientContext); |
var onlineClientContext = new OnlineClientContext(chatMessage.TenantId, chatMessage.ToUserId.Value); |
||||
|
var onlineClients = _onlineClientManager.GetAllByContext(onlineClientContext); |
||||
var onlineClientConnectionIds = onlineClients.Select(client => client.ConnectionId).ToImmutableArray(); |
|
||||
var signalRClients = _hubContext.Clients.Clients(onlineClientConnectionIds); |
var onlineClientConnectionIds = onlineClients.Select(client => client.ConnectionId).ToImmutableArray(); |
||||
if (signalRClients == null) |
var signalRClients = _hubContext.Clients.Clients(onlineClientConnectionIds); |
||||
{ |
if (signalRClients == null) |
||||
Logger.LogDebug("Can not get user " + onlineClientContext.UserId + " connection from SignalR hub!"); |
{ |
||||
return; |
Logger.LogDebug("Can not get user " + onlineClientContext.UserId + " connection from SignalR hub!"); |
||||
} |
return; |
||||
await signalRClients.SendAsync(_options.GetChatMessageMethod, chatMessage); |
} |
||||
} |
await signalRClients.SendAsync(_options.GetChatMessageMethod, chatMessage); |
||||
catch (Exception ex) |
} |
||||
{ |
catch (Exception ex) |
||||
Logger.LogWarning("Could not send message to user: {0}", chatMessage.ToUserId); |
{ |
||||
Logger.LogWarning("Send to user message error: {0}", ex.Message); |
Logger.LogWarning("Could not send message to user: {0}", chatMessage.ToUserId); |
||||
} |
Logger.LogWarning("Send to user message error: {0}", ex.Message); |
||||
} |
} |
||||
} |
} |
||||
} |
} |
||||
|
} |
||||
|
|||||
@ -1,15 +1,18 @@ |
|||||
using LINGYUN.Abp.IM.Messages; |
using LINGYUN.Abp.IM.Messages; |
||||
using Volo.Abp.Collections; |
using Volo.Abp.Collections; |
||||
|
|
||||
namespace LINGYUN.Abp.IM |
namespace LINGYUN.Abp.IM |
||||
{ |
{ |
||||
public class AbpIMOptions |
public class AbpIMOptions |
||||
{ |
{ |
||||
public ITypeList<IMessageSenderProvider> Providers { get; } |
/// <summary>
|
||||
|
/// 消息发送者
|
||||
public AbpIMOptions() |
/// </summary>
|
||||
{ |
public ITypeList<IMessageSenderProvider> Providers { get; } |
||||
Providers = new TypeList<IMessageSenderProvider>(); |
|
||||
} |
public AbpIMOptions() |
||||
} |
{ |
||||
} |
Providers = new TypeList<IMessageSenderProvider>(); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|||||
@ -0,0 +1,9 @@ |
|||||
|
using System.Threading.Tasks; |
||||
|
|
||||
|
namespace LINGYUN.Abp.IM.Messages |
||||
|
{ |
||||
|
public interface IMessageBlocker |
||||
|
{ |
||||
|
Task InterceptAsync(ChatMessage message); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,45 @@ |
|||||
|
namespace LINGYUN.Abp.IM.Messages |
||||
|
{ |
||||
|
public class MessageSendResult |
||||
|
{ |
||||
|
public bool Success { get; } |
||||
|
public string Error { get; } |
||||
|
public int Code { get; } |
||||
|
public string Form { get; } |
||||
|
public string To { get; } |
||||
|
public string Content { get; } |
||||
|
public static MessageSendResult Successed(string form, string to, string content) |
||||
|
{ |
||||
|
return new MessageSendResult(form, to, content); |
||||
|
} |
||||
|
|
||||
|
public static MessageSendResult Failed(int code, string error, string form, string to, string content) |
||||
|
{ |
||||
|
return new MessageSendResult(code, error, form, to, content); |
||||
|
} |
||||
|
private MessageSendResult( |
||||
|
int code, |
||||
|
string error, |
||||
|
string form, |
||||
|
string to, |
||||
|
string content) |
||||
|
{ |
||||
|
Code = code; |
||||
|
Error = error; |
||||
|
Form = form; |
||||
|
To = to; |
||||
|
Success = false; |
||||
|
} |
||||
|
|
||||
|
private MessageSendResult( |
||||
|
string form, |
||||
|
string to, |
||||
|
string content) |
||||
|
{ |
||||
|
Form = form; |
||||
|
To = to; |
||||
|
Content = content; |
||||
|
Success = true; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -1,70 +1,50 @@ |
|||||
using Microsoft.Extensions.DependencyInjection; |
using Microsoft.Extensions.Logging; |
||||
using Microsoft.Extensions.Logging; |
using Microsoft.Extensions.Logging.Abstractions; |
||||
using Microsoft.Extensions.Logging.Abstractions; |
using System; |
||||
using System; |
using System.Threading.Tasks; |
||||
using System.Threading.Tasks; |
using Volo.Abp.DependencyInjection; |
||||
using Volo.Abp.DependencyInjection; |
|
||||
|
namespace LINGYUN.Abp.IM.Messages |
||||
namespace LINGYUN.Abp.IM.Messages |
{ |
||||
{ |
public abstract class MessageSenderProviderBase : IMessageSenderProvider, ITransientDependency |
||||
public abstract class MessageSenderProviderBase : IMessageSenderProvider, ITransientDependency |
{ |
||||
{ |
public abstract string Name { get; } |
||||
public abstract string Name { get; } |
|
||||
|
protected IAbpLazyServiceProvider ServiceProvider { get; } |
||||
protected IServiceProvider ServiceProvider { get; } |
|
||||
|
protected ILoggerFactory LoggerFactory => ServiceProvider.LazyGetRequiredService<ILoggerFactory>(); |
||||
protected readonly object ServiceProviderLock = new object(); |
|
||||
|
protected ILogger Logger => _lazyLogger.Value; |
||||
public ILoggerFactory LoggerFactory => LazyGetRequiredService(ref _loggerFactory); |
private Lazy<ILogger> _lazyLogger => new Lazy<ILogger>(() => LoggerFactory?.CreateLogger(GetType().FullName) ?? NullLogger.Instance, true); |
||||
private ILoggerFactory _loggerFactory; |
|
||||
|
protected MessageSenderProviderBase(IAbpLazyServiceProvider serviceProvider) |
||||
protected ILogger Logger => _lazyLogger.Value; |
{ |
||||
private Lazy<ILogger> _lazyLogger => new Lazy<ILogger>(() => LoggerFactory?.CreateLogger(GetType().FullName) ?? NullLogger.Instance, true); |
ServiceProvider = serviceProvider; |
||||
|
} |
||||
protected TService LazyGetRequiredService<TService>(ref TService reference) |
|
||||
{ |
public virtual async Task SendMessageAsync(ChatMessage chatMessage) |
||||
if (reference == null) |
{ |
||||
{ |
try |
||||
lock (ServiceProviderLock) |
{ |
||||
{ |
if (!chatMessage.GroupId.IsNullOrWhiteSpace()) |
||||
if (reference == null) |
{ |
||||
{ |
await SendMessageToGroupAsync(chatMessage); |
||||
reference = ServiceProvider.GetRequiredService<TService>(); |
} |
||||
} |
else |
||||
} |
{ |
||||
} |
await SendMessageToUserAsync(chatMessage); |
||||
|
} |
||||
return reference; |
} |
||||
} |
catch (Exception ex) |
||||
|
{ |
||||
protected MessageSenderProviderBase(IServiceProvider serviceProvider) |
Logger.LogWarning("Could not send message, group: {0}, formUser: {1}, toUser: {2}", |
||||
{ |
chatMessage.GroupId, chatMessage.FormUserName, |
||||
ServiceProvider = serviceProvider; |
chatMessage.ToUserId.HasValue ? chatMessage.ToUserId.ToString() : "None"); |
||||
} |
Logger.LogWarning("Send group message error: {0}", ex.Message); |
||||
|
} |
||||
public virtual async Task SendMessageAsync(ChatMessage chatMessage) |
} |
||||
{ |
|
||||
try |
protected abstract Task SendMessageToGroupAsync(ChatMessage chatMessage); |
||||
{ |
protected abstract Task SendMessageToUserAsync(ChatMessage chatMessage); |
||||
if (!chatMessage.GroupId.IsNullOrWhiteSpace()) |
} |
||||
{ |
} |
||||
await SendMessageToGroupAsync(chatMessage); |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
await SendMessageToUserAsync(chatMessage); |
|
||||
} |
|
||||
} |
|
||||
catch (Exception ex) |
|
||||
{ |
|
||||
Logger.LogWarning("Could not send message, group: {0}, formUser: {1}, toUser: {2}", |
|
||||
chatMessage.GroupId, chatMessage.FormUserName, |
|
||||
chatMessage.ToUserId.HasValue ? chatMessage.ToUserId.ToString() : "None"); |
|
||||
Logger.LogWarning("Send group message error: {0}", ex.Message); |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
protected abstract Task SendMessageToGroupAsync(ChatMessage chatMessage); |
|
||||
protected abstract Task SendMessageToUserAsync(ChatMessage chatMessage); |
|
||||
} |
|
||||
} |
|
||||
|
|||||
@ -0,0 +1,14 @@ |
|||||
|
using System.Threading.Tasks; |
||||
|
using Volo.Abp.DependencyInjection; |
||||
|
|
||||
|
namespace LINGYUN.Abp.IM.Messages |
||||
|
{ |
||||
|
[Dependency(TryRegister = true)] |
||||
|
public class NullMessageBlocker : IMessageBlocker, ISingletonDependency |
||||
|
{ |
||||
|
public Task InterceptAsync(ChatMessage message) |
||||
|
{ |
||||
|
return Task.CompletedTask; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -1,54 +1,52 @@ |
|||||
using System; |
using System; |
||||
using System.Collections.Generic; |
using Volo.Abp.Domain.Entities; |
||||
using System.Linq; |
using Volo.Abp.MultiTenancy; |
||||
using Volo.Abp.Domain.Entities; |
|
||||
using Volo.Abp.MultiTenancy; |
namespace LINGYUN.Abp.MessageService.Chat |
||||
|
{ |
||||
namespace LINGYUN.Abp.MessageService.Chat |
public class UserChatSetting : Entity<long>, IMultiTenant |
||||
{ |
{ |
||||
public class UserChatSetting : Entity<long>, IMultiTenant |
/// <summary>
|
||||
{ |
/// 租户
|
||||
/// <summary>
|
/// </summary>
|
||||
/// 租户
|
public virtual Guid? TenantId { get; protected set; } |
||||
/// </summary>
|
/// <summary>
|
||||
public virtual Guid? TenantId { get; protected set; } |
/// 用户标识
|
||||
/// <summary>
|
/// </summary>
|
||||
/// 用户标识
|
public virtual Guid UserId { get; protected set; } |
||||
/// </summary>
|
/// <summary>
|
||||
public virtual Guid UserId { get; protected set; } |
/// 允许匿名聊天
|
||||
/// <summary>
|
/// </summary>
|
||||
/// 允许匿名聊天
|
public virtual bool AllowAnonymous { get; set; } |
||||
/// </summary>
|
/// <summary>
|
||||
public virtual bool AllowAnonymous { get; set; } |
/// 允许添加好友
|
||||
/// <summary>
|
/// </summary>
|
||||
/// 允许添加好友
|
public virtual bool AllowAddFriend { get; set; } |
||||
/// </summary>
|
/// <summary>
|
||||
public virtual bool AllowAddFriend { get; set; } |
/// 添加好友需要验证
|
||||
/// <summary>
|
/// </summary>
|
||||
/// 添加好友需要验证
|
public virtual bool RequireAddFriendValition { get; set; } |
||||
/// </summary>
|
/// <summary>
|
||||
public virtual bool RequireAddFriendValition { get; set; } |
/// 允许接收消息
|
||||
/// <summary>
|
/// </summary>
|
||||
/// 允许接收消息
|
public virtual bool AllowReceiveMessage { get; set; } |
||||
/// </summary>
|
/// <summary>
|
||||
public virtual bool AllowReceiveMessage { get; set; } |
/// 允许发送消息
|
||||
/// <summary>
|
/// </summary>
|
||||
/// 允许发送消息
|
public virtual bool AllowSendMessage { get; set; } |
||||
/// </summary>
|
protected UserChatSetting() |
||||
public virtual bool AllowSendMessage { get; set; } |
{ |
||||
protected UserChatSetting() |
} |
||||
{ |
public UserChatSetting(Guid userId, Guid? tenantId) |
||||
} |
: this() |
||||
public UserChatSetting(Guid userId, Guid? tenantId) |
{ |
||||
: this() |
UserId = userId; |
||||
{ |
TenantId = tenantId; |
||||
UserId = userId; |
AllowAnonymous = false; |
||||
TenantId = tenantId; |
AllowAddFriend = true; |
||||
AllowAnonymous = false; |
AllowReceiveMessage = true; |
||||
AllowAddFriend = true; |
AllowSendMessage = true; |
||||
AllowReceiveMessage = true; |
RequireAddFriendValition = true; |
||||
AllowSendMessage = true; |
} |
||||
RequireAddFriendValition = true; |
} |
||||
} |
} |
||||
} |
|
||||
} |
|
||||
|
|||||
@ -1,377 +1,389 @@ |
|||||
using Microsoft.AspNetCore.Authorization; |
using Microsoft.AspNetCore.Authorization; |
||||
using Microsoft.Extensions.Options; |
using Microsoft.Extensions.Options; |
||||
using System.Collections.Generic; |
using System.Collections.Generic; |
||||
using System.Linq; |
using System.Linq; |
||||
using System.Threading.Tasks; |
using System.Threading.Tasks; |
||||
using Volo.Abp.Account.Settings; |
using Volo.Abp.Account.Settings; |
||||
using Volo.Abp.Application.Dtos; |
using Volo.Abp.Application.Dtos; |
||||
using Volo.Abp.Application.Services; |
using Volo.Abp.Application.Services; |
||||
using Volo.Abp.Caching; |
using Volo.Abp.Caching; |
||||
using Volo.Abp.Emailing; |
using Volo.Abp.Emailing; |
||||
using Volo.Abp.Identity.Settings; |
using Volo.Abp.Identity.Settings; |
||||
using Volo.Abp.Localization; |
using Volo.Abp.Localization; |
||||
using Volo.Abp.MultiTenancy; |
using Volo.Abp.MultiTenancy; |
||||
using Volo.Abp.SettingManagement; |
using Volo.Abp.SettingManagement; |
||||
using Volo.Abp.SettingManagement.Localization; |
using Volo.Abp.SettingManagement.Localization; |
||||
using Volo.Abp.Settings; |
using Volo.Abp.Settings; |
||||
using Volo.Abp.Timing; |
using Volo.Abp.Timing; |
||||
using Volo.Abp.Users; |
using Volo.Abp.Users; |
||||
using Volo.Abp.EventBus.Distributed; |
using Volo.Abp.EventBus.Distributed; |
||||
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; |
using Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations; |
||||
|
using Volo.Abp.Features; |
||||
namespace LINGYUN.Abp.SettingManagement |
|
||||
{ |
namespace LINGYUN.Abp.SettingManagement |
||||
[Authorize(AbpSettingManagementPermissions.Settings.Default)] |
{ |
||||
public class SettingAppService : ApplicationService, ISettingAppService |
[Authorize(AbpSettingManagementPermissions.Settings.Default)] |
||||
{ |
public class SettingAppService : ApplicationService, ISettingAppService |
||||
protected AbpLocalizationOptions LocalizationOptions { get; } |
{ |
||||
|
protected AbpLocalizationOptions LocalizationOptions { get; } |
||||
protected IDistributedEventBus EventBus { get; } |
|
||||
protected ISettingManager SettingManager { get; } |
protected IDistributedEventBus EventBus { get; } |
||||
protected ISettingDefinitionManager SettingDefinitionManager { get; } |
protected ISettingManager SettingManager { get; } |
||||
|
protected ISettingDefinitionManager SettingDefinitionManager { get; } |
||||
protected IDistributedCache<SettingCacheItem> Cache { get; } |
|
||||
public SettingAppService( |
protected IDistributedCache<SettingCacheItem> Cache { get; } |
||||
IDistributedEventBus eventBus, |
public SettingAppService( |
||||
ISettingManager settingManager, |
IDistributedEventBus eventBus, |
||||
IDistributedCache<SettingCacheItem> cache, |
ISettingManager settingManager, |
||||
IOptions<AbpLocalizationOptions> localizationOptions, |
IDistributedCache<SettingCacheItem> cache, |
||||
ISettingDefinitionManager settingDefinitionManager) |
IOptions<AbpLocalizationOptions> localizationOptions, |
||||
{ |
ISettingDefinitionManager settingDefinitionManager) |
||||
Cache = cache; |
{ |
||||
EventBus = eventBus; |
Cache = cache; |
||||
SettingManager = settingManager; |
EventBus = eventBus; |
||||
SettingDefinitionManager = settingDefinitionManager; |
SettingManager = settingManager; |
||||
LocalizationOptions = localizationOptions.Value; |
SettingDefinitionManager = settingDefinitionManager; |
||||
LocalizationResource = typeof(AbpSettingManagementResource); |
LocalizationOptions = localizationOptions.Value; |
||||
} |
LocalizationResource = typeof(AbpSettingManagementResource); |
||||
|
} |
||||
[Authorize(AbpSettingManagementPermissions.Settings.Manager)] |
|
||||
public virtual async Task SetGlobalAsync(UpdateSettingsDto input) |
[Authorize(AbpSettingManagementPermissions.Settings.Manager)] |
||||
{ |
public virtual async Task SetGlobalAsync(UpdateSettingsDto input) |
||||
foreach (var setting in input.Settings) |
{ |
||||
{ |
// 增加特性检查
|
||||
await SettingManager.SetGlobalAsync(setting.Name, setting.Value); |
await CheckFeatureAsync(); |
||||
} |
|
||||
|
foreach (var setting in input.Settings) |
||||
CurrentUnitOfWork.OnCompleted(async () => |
{ |
||||
{ |
await SettingManager.SetGlobalAsync(setting.Name, setting.Value); |
||||
// 发送刷新用户缓存事件
|
} |
||||
await EventBus.PublishAsync(new CurrentApplicationConfigurationCacheResetEventData()); |
|
||||
}); |
CurrentUnitOfWork.OnCompleted(async () => |
||||
|
{ |
||||
await CurrentUnitOfWork.SaveChangesAsync(); |
// 发送刷新用户缓存事件
|
||||
} |
await EventBus.PublishAsync(new CurrentApplicationConfigurationCacheResetEventData()); |
||||
|
}); |
||||
[Authorize(AbpSettingManagementPermissions.Settings.Manager)] |
|
||||
public virtual async Task SetCurrentTenantAsync(UpdateSettingsDto input) |
await CurrentUnitOfWork.SaveChangesAsync(); |
||||
{ |
} |
||||
if (CurrentTenant.IsAvailable) |
|
||||
{ |
[Authorize(AbpSettingManagementPermissions.Settings.Manager)] |
||||
foreach (var setting in input.Settings) |
public virtual async Task SetCurrentTenantAsync(UpdateSettingsDto input) |
||||
{ |
{ |
||||
await SettingManager.SetForTenantAsync(CurrentTenant.GetId(), setting.Name, setting.Value); |
// 增加特性检查
|
||||
} |
await CheckFeatureAsync(); |
||||
|
|
||||
CurrentUnitOfWork.OnCompleted(async () => |
if (CurrentTenant.IsAvailable) |
||||
{ |
{ |
||||
// 发送刷新用户缓存事件
|
foreach (var setting in input.Settings) |
||||
await EventBus.PublishAsync(new CurrentApplicationConfigurationCacheResetEventData()); |
{ |
||||
}); |
await SettingManager.SetForTenantAsync(CurrentTenant.GetId(), setting.Name, setting.Value); |
||||
|
} |
||||
await CurrentUnitOfWork.SaveChangesAsync(); |
|
||||
} |
CurrentUnitOfWork.OnCompleted(async () => |
||||
} |
{ |
||||
|
// 发送刷新用户缓存事件
|
||||
//[Authorize]
|
await EventBus.PublishAsync(new CurrentApplicationConfigurationCacheResetEventData()); |
||||
[AllowAnonymous] |
}); |
||||
public virtual async Task<ListResultDto<SettingGroupDto>> GetAllForCurrentTenantAsync() |
|
||||
{ |
await CurrentUnitOfWork.SaveChangesAsync(); |
||||
return await GetAllForProviderAsync(TenantSettingValueProvider.ProviderName, CurrentTenant.GetId().ToString()); |
} |
||||
} |
} |
||||
|
|
||||
[AllowAnonymous] |
//[Authorize]
|
||||
public virtual async Task<ListResultDto<SettingGroupDto>> GetAllForGlobalAsync() |
[AllowAnonymous] |
||||
{ |
public virtual async Task<ListResultDto<SettingGroupDto>> GetAllForCurrentTenantAsync() |
||||
return await GetAllForProviderAsync(GlobalSettingValueProvider.ProviderName, null); |
{ |
||||
} |
return await GetAllForProviderAsync(TenantSettingValueProvider.ProviderName, CurrentTenant.GetId().ToString()); |
||||
|
} |
||||
protected virtual async Task<ListResultDto<SettingGroupDto>> GetAllForProviderAsync(string providerName, string providerKey) |
|
||||
{ |
[AllowAnonymous] |
||||
/* |
public virtual async Task<ListResultDto<SettingGroupDto>> GetAllForGlobalAsync() |
||||
* 2020-11-19 |
{ |
||||
* colin@foxmail.com |
return await GetAllForProviderAsync(GlobalSettingValueProvider.ProviderName, null); |
||||
* |
} |
||||
* 之所以重构为这种看似硬编码的设计,是因为硬编码的都是常用的自带的配置 |
|
||||
* |
protected virtual async Task<ListResultDto<SettingGroupDto>> GetAllForProviderAsync(string providerName, string providerKey) |
||||
* 自定义的应用模块可以实现返回相同Dto的配置服务,然后通过路由的聚合功能, |
{ |
||||
* 轻松加入到前端的设置管理(因为vue前端已设计为动态表单页面) |
/* |
||||
* |
* 2020-11-19 |
||||
* 最初的设计才是不合理的,前端不能硬编码设置管理界面,这应该是后端的事情 |
* colin@foxmail.com |
||||
*/ |
* |
||||
|
* 之所以重构为这种看似硬编码的设计,是因为硬编码的都是常用的自带的配置 |
||||
var settingGroups = new List<SettingGroupDto>(); |
* |
||||
|
* 自定义的应用模块可以实现返回相同Dto的配置服务,然后通过路由的聚合功能, |
||||
#region 系统设置
|
* 轻松加入到前端的设置管理(因为vue前端已设计为动态表单页面) |
||||
|
* |
||||
var sysSettingGroup = new SettingGroupDto(L["DisplayName:System"], L["Description:System"]); |
* 最初的设计才是不合理的,前端不能硬编码设置管理界面,这应该是后端的事情 |
||||
// 语言
|
*/ |
||||
var languageSetting = sysSettingGroup.AddSetting(L["DisplayName:System.Language"], L["Description:System.Language"]); |
|
||||
languageSetting.AddDetail( |
var settingGroups = new List<SettingGroupDto>(); |
||||
SettingDefinitionManager.Get(LocalizationSettingNames.DefaultLanguage), |
|
||||
StringLocalizerFactory, |
#region 系统设置
|
||||
await SettingManager.GetOrNullAsync(LocalizationSettingNames.DefaultLanguage, providerName, providerKey), |
|
||||
ValueType.Option) |
var sysSettingGroup = new SettingGroupDto(L["DisplayName:System"], L["Description:System"]); |
||||
.AddOptions(LocalizationOptions.Languages.Select(l => new OptionDto(l.DisplayName, l.CultureName))); |
// 语言
|
||||
// 时区
|
var languageSetting = sysSettingGroup.AddSetting(L["DisplayName:System.Language"], L["Description:System.Language"]); |
||||
var timingSetting = sysSettingGroup.AddSetting(L["DisplayName:System.Timing"], L["Description:System.Timing"]); |
languageSetting.AddDetail( |
||||
timingSetting.AddDetail( |
SettingDefinitionManager.Get(LocalizationSettingNames.DefaultLanguage), |
||||
SettingDefinitionManager.Get(TimingSettingNames.TimeZone), |
StringLocalizerFactory, |
||||
StringLocalizerFactory, |
await SettingManager.GetOrNullAsync(LocalizationSettingNames.DefaultLanguage, providerName, providerKey), |
||||
await SettingManager.GetOrNullAsync(TimingSettingNames.TimeZone, providerName, providerKey), |
ValueType.Option) |
||||
ValueType.String); |
.AddOptions(LocalizationOptions.Languages.Select(l => new OptionDto(l.DisplayName, l.CultureName))); |
||||
settingGroups.Add(sysSettingGroup); |
// 时区
|
||||
|
var timingSetting = sysSettingGroup.AddSetting(L["DisplayName:System.Timing"], L["Description:System.Timing"]); |
||||
#endregion
|
timingSetting.AddDetail( |
||||
|
SettingDefinitionManager.Get(TimingSettingNames.TimeZone), |
||||
#region 安全设置
|
StringLocalizerFactory, |
||||
|
await SettingManager.GetOrNullAsync(TimingSettingNames.TimeZone, providerName, providerKey), |
||||
var securitySettingGroup = new SettingGroupDto(L["DisplayName:Security"], L["Description:Security"]); |
ValueType.String); |
||||
|
settingGroups.Add(sysSettingGroup); |
||||
// 用户账户
|
|
||||
var accountSetting = securitySettingGroup.AddSetting(L["DisplayName:Security.Account"], L["Description:Security.Account"]); |
#endregion
|
||||
// 启用本地登录
|
|
||||
accountSetting.AddDetail( |
#region 安全设置
|
||||
SettingDefinitionManager.Get(AccountSettingNames.EnableLocalLogin), |
|
||||
StringLocalizerFactory, |
var securitySettingGroup = new SettingGroupDto(L["DisplayName:Security"], L["Description:Security"]); |
||||
await SettingManager.GetOrNullAsync(AccountSettingNames.EnableLocalLogin, providerName, providerKey), |
|
||||
ValueType.Boolean); |
// 用户账户
|
||||
accountSetting.AddDetail( |
var accountSetting = securitySettingGroup.AddSetting(L["DisplayName:Security.Account"], L["Description:Security.Account"]); |
||||
SettingDefinitionManager.Get(AccountSettingNames.IsSelfRegistrationEnabled), |
// 启用本地登录
|
||||
StringLocalizerFactory, |
accountSetting.AddDetail( |
||||
await SettingManager.GetOrNullAsync(AccountSettingNames.IsSelfRegistrationEnabled, providerName, providerKey), |
SettingDefinitionManager.Get(AccountSettingNames.EnableLocalLogin), |
||||
ValueType.Boolean); |
StringLocalizerFactory, |
||||
|
await SettingManager.GetOrNullAsync(AccountSettingNames.EnableLocalLogin, providerName, providerKey), |
||||
settingGroups.Add(securitySettingGroup); |
ValueType.Boolean); |
||||
|
accountSetting.AddDetail( |
||||
#endregion
|
SettingDefinitionManager.Get(AccountSettingNames.IsSelfRegistrationEnabled), |
||||
|
StringLocalizerFactory, |
||||
#region 身份标识设置
|
await SettingManager.GetOrNullAsync(AccountSettingNames.IsSelfRegistrationEnabled, providerName, providerKey), |
||||
|
ValueType.Boolean); |
||||
// 身份标识设置
|
|
||||
var identitySetting = new SettingGroupDto(L["DisplayName:Identity"], L["Description:Identity"]); |
settingGroups.Add(securitySettingGroup); |
||||
|
|
||||
#region 用户锁定
|
#endregion
|
||||
|
|
||||
var lockoutSetting = identitySetting.AddSetting(L["DisplayName:Identity.Lockout"], L["Description:Identity.Lockout"]); |
#region 身份标识设置
|
||||
lockoutSetting.AddDetail( |
|
||||
SettingDefinitionManager.Get(IdentitySettingNames.Lockout.AllowedForNewUsers), |
// 身份标识设置
|
||||
StringLocalizerFactory, |
var identitySetting = new SettingGroupDto(L["DisplayName:Identity"], L["Description:Identity"]); |
||||
await SettingManager.GetOrNullAsync(IdentitySettingNames.Lockout.AllowedForNewUsers, providerName, providerKey), |
|
||||
ValueType.Boolean); |
#region 用户锁定
|
||||
lockoutSetting.AddDetail( |
|
||||
SettingDefinitionManager.Get(IdentitySettingNames.Lockout.LockoutDuration), |
var lockoutSetting = identitySetting.AddSetting(L["DisplayName:Identity.Lockout"], L["Description:Identity.Lockout"]); |
||||
StringLocalizerFactory, |
lockoutSetting.AddDetail( |
||||
await SettingManager.GetOrNullAsync(IdentitySettingNames.Lockout.LockoutDuration, providerName, providerKey), |
SettingDefinitionManager.Get(IdentitySettingNames.Lockout.AllowedForNewUsers), |
||||
ValueType.Number); |
StringLocalizerFactory, |
||||
lockoutSetting.AddDetail( |
await SettingManager.GetOrNullAsync(IdentitySettingNames.Lockout.AllowedForNewUsers, providerName, providerKey), |
||||
SettingDefinitionManager.Get(IdentitySettingNames.Lockout.MaxFailedAccessAttempts), |
ValueType.Boolean); |
||||
StringLocalizerFactory, |
lockoutSetting.AddDetail( |
||||
await SettingManager.GetOrNullAsync(IdentitySettingNames.Lockout.MaxFailedAccessAttempts, providerName, providerKey), |
SettingDefinitionManager.Get(IdentitySettingNames.Lockout.LockoutDuration), |
||||
ValueType.Number); |
StringLocalizerFactory, |
||||
|
await SettingManager.GetOrNullAsync(IdentitySettingNames.Lockout.LockoutDuration, providerName, providerKey), |
||||
#endregion
|
ValueType.Number); |
||||
|
lockoutSetting.AddDetail( |
||||
#region 用户
|
SettingDefinitionManager.Get(IdentitySettingNames.Lockout.MaxFailedAccessAttempts), |
||||
|
StringLocalizerFactory, |
||||
var userSetting = identitySetting.AddSetting(L["DisplayName:Identity.User"], L["Description:Identity.User"]); |
await SettingManager.GetOrNullAsync(IdentitySettingNames.Lockout.MaxFailedAccessAttempts, providerName, providerKey), |
||||
userSetting.AddDetail( |
ValueType.Number); |
||||
SettingDefinitionManager.Get(IdentitySettingNames.User.IsEmailUpdateEnabled), |
|
||||
StringLocalizerFactory, |
#endregion
|
||||
await SettingManager.GetOrNullAsync(IdentitySettingNames.User.IsEmailUpdateEnabled, providerName, providerKey), |
|
||||
ValueType.Boolean); |
#region 用户
|
||||
userSetting.AddDetail( |
|
||||
SettingDefinitionManager.Get(IdentitySettingNames.User.IsUserNameUpdateEnabled), |
var userSetting = identitySetting.AddSetting(L["DisplayName:Identity.User"], L["Description:Identity.User"]); |
||||
StringLocalizerFactory, |
userSetting.AddDetail( |
||||
await SettingManager.GetOrNullAsync(IdentitySettingNames.User.IsUserNameUpdateEnabled, providerName, providerKey), |
SettingDefinitionManager.Get(IdentitySettingNames.User.IsEmailUpdateEnabled), |
||||
ValueType.Boolean); |
StringLocalizerFactory, |
||||
userSetting.AddDetail( |
await SettingManager.GetOrNullAsync(IdentitySettingNames.User.IsEmailUpdateEnabled, providerName, providerKey), |
||||
SettingDefinitionManager.Get(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsNewUserRegister), |
ValueType.Boolean); |
||||
StringLocalizerFactory, |
userSetting.AddDetail( |
||||
await SettingManager.GetOrNullAsync(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsNewUserRegister, providerName, providerKey), |
SettingDefinitionManager.Get(IdentitySettingNames.User.IsUserNameUpdateEnabled), |
||||
ValueType.String); |
StringLocalizerFactory, |
||||
userSetting.AddDetail( |
await SettingManager.GetOrNullAsync(IdentitySettingNames.User.IsUserNameUpdateEnabled, providerName, providerKey), |
||||
SettingDefinitionManager.Get(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsResetPassword), |
ValueType.Boolean); |
||||
StringLocalizerFactory, |
userSetting.AddDetail( |
||||
await SettingManager.GetOrNullAsync(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsResetPassword, providerName, providerKey), |
SettingDefinitionManager.Get(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsNewUserRegister), |
||||
ValueType.String); |
StringLocalizerFactory, |
||||
userSetting.AddDetail( |
await SettingManager.GetOrNullAsync(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsNewUserRegister, providerName, providerKey), |
||||
SettingDefinitionManager.Get(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsUserSignin), |
ValueType.String); |
||||
StringLocalizerFactory, |
userSetting.AddDetail( |
||||
await SettingManager.GetOrNullAsync(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsUserSignin, providerName, providerKey), |
SettingDefinitionManager.Get(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsResetPassword), |
||||
ValueType.String); |
StringLocalizerFactory, |
||||
userSetting.AddDetail( |
await SettingManager.GetOrNullAsync(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsResetPassword, providerName, providerKey), |
||||
SettingDefinitionManager.Get(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsPhoneNumberConfirmed), |
ValueType.String); |
||||
StringLocalizerFactory, |
userSetting.AddDetail( |
||||
await SettingManager.GetOrNullAsync(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsPhoneNumberConfirmed, providerName, providerKey), |
SettingDefinitionManager.Get(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsUserSignin), |
||||
ValueType.String); |
StringLocalizerFactory, |
||||
userSetting.AddDetail( |
await SettingManager.GetOrNullAsync(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsUserSignin, providerName, providerKey), |
||||
SettingDefinitionManager.Get(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsRepetInterval), |
ValueType.String); |
||||
StringLocalizerFactory, |
userSetting.AddDetail( |
||||
await SettingManager.GetOrNullAsync(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsRepetInterval, providerName, providerKey), |
SettingDefinitionManager.Get(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsPhoneNumberConfirmed), |
||||
ValueType.Number); |
StringLocalizerFactory, |
||||
|
await SettingManager.GetOrNullAsync(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsPhoneNumberConfirmed, providerName, providerKey), |
||||
#endregion
|
ValueType.String); |
||||
|
userSetting.AddDetail( |
||||
#region 登录
|
SettingDefinitionManager.Get(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsRepetInterval), |
||||
|
StringLocalizerFactory, |
||||
var signinSetting = identitySetting.AddSetting(L["DisplayName:Identity.SignIn"], L["Description:Identity.SignIn"]); |
await SettingManager.GetOrNullAsync(LINGYUN.Abp.Identity.Settings.IdentitySettingNames.User.SmsRepetInterval, providerName, providerKey), |
||||
signinSetting.AddDetail( |
ValueType.Number); |
||||
SettingDefinitionManager.Get(IdentitySettingNames.SignIn.EnablePhoneNumberConfirmation), |
|
||||
StringLocalizerFactory, |
#endregion
|
||||
await SettingManager.GetOrNullAsync(IdentitySettingNames.SignIn.EnablePhoneNumberConfirmation, providerName, providerKey), |
|
||||
ValueType.Boolean); |
#region 登录
|
||||
signinSetting.AddDetail( |
|
||||
SettingDefinitionManager.Get(IdentitySettingNames.SignIn.RequireConfirmedEmail), |
var signinSetting = identitySetting.AddSetting(L["DisplayName:Identity.SignIn"], L["Description:Identity.SignIn"]); |
||||
StringLocalizerFactory, |
signinSetting.AddDetail( |
||||
await SettingManager.GetOrNullAsync(IdentitySettingNames.SignIn.RequireConfirmedEmail, providerName, providerKey), |
SettingDefinitionManager.Get(IdentitySettingNames.SignIn.EnablePhoneNumberConfirmation), |
||||
ValueType.Boolean); |
StringLocalizerFactory, |
||||
signinSetting.AddDetail( |
await SettingManager.GetOrNullAsync(IdentitySettingNames.SignIn.EnablePhoneNumberConfirmation, providerName, providerKey), |
||||
SettingDefinitionManager.Get(IdentitySettingNames.SignIn.RequireConfirmedPhoneNumber), |
ValueType.Boolean); |
||||
StringLocalizerFactory, |
signinSetting.AddDetail( |
||||
await SettingManager.GetOrNullAsync(IdentitySettingNames.SignIn.RequireConfirmedPhoneNumber, providerName, providerKey), |
SettingDefinitionManager.Get(IdentitySettingNames.SignIn.RequireConfirmedEmail), |
||||
ValueType.Boolean); |
StringLocalizerFactory, |
||||
|
await SettingManager.GetOrNullAsync(IdentitySettingNames.SignIn.RequireConfirmedEmail, providerName, providerKey), |
||||
#endregion
|
ValueType.Boolean); |
||||
|
signinSetting.AddDetail( |
||||
#region 密码
|
SettingDefinitionManager.Get(IdentitySettingNames.SignIn.RequireConfirmedPhoneNumber), |
||||
|
StringLocalizerFactory, |
||||
var passwordSetting = identitySetting.AddSetting(L["DisplayName:Identity.Password"], L["Description:Identity.Password"]); |
await SettingManager.GetOrNullAsync(IdentitySettingNames.SignIn.RequireConfirmedPhoneNumber, providerName, providerKey), |
||||
passwordSetting.AddDetail( |
ValueType.Boolean); |
||||
SettingDefinitionManager.Get(IdentitySettingNames.Password.RequireDigit), |
|
||||
StringLocalizerFactory, |
#endregion
|
||||
await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequireDigit, providerName, providerKey), |
|
||||
ValueType.Boolean); |
#region 密码
|
||||
passwordSetting.AddDetail( |
|
||||
SettingDefinitionManager.Get(IdentitySettingNames.Password.RequiredLength), |
var passwordSetting = identitySetting.AddSetting(L["DisplayName:Identity.Password"], L["Description:Identity.Password"]); |
||||
StringLocalizerFactory, |
passwordSetting.AddDetail( |
||||
await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequiredLength, providerName, providerKey), |
SettingDefinitionManager.Get(IdentitySettingNames.Password.RequireDigit), |
||||
ValueType.Number); |
StringLocalizerFactory, |
||||
passwordSetting.AddDetail( |
await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequireDigit, providerName, providerKey), |
||||
SettingDefinitionManager.Get(IdentitySettingNames.Password.RequiredUniqueChars), |
ValueType.Boolean); |
||||
StringLocalizerFactory, |
passwordSetting.AddDetail( |
||||
await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequiredUniqueChars, providerName, providerKey), |
SettingDefinitionManager.Get(IdentitySettingNames.Password.RequiredLength), |
||||
ValueType.Number); |
StringLocalizerFactory, |
||||
passwordSetting.AddDetail( |
await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequiredLength, providerName, providerKey), |
||||
SettingDefinitionManager.Get(IdentitySettingNames.Password.RequireLowercase), |
ValueType.Number); |
||||
StringLocalizerFactory, |
passwordSetting.AddDetail( |
||||
await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequireLowercase, providerName, providerKey), |
SettingDefinitionManager.Get(IdentitySettingNames.Password.RequiredUniqueChars), |
||||
ValueType.Boolean); |
StringLocalizerFactory, |
||||
passwordSetting.AddDetail( |
await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequiredUniqueChars, providerName, providerKey), |
||||
SettingDefinitionManager.Get(IdentitySettingNames.Password.RequireUppercase), |
ValueType.Number); |
||||
StringLocalizerFactory, |
passwordSetting.AddDetail( |
||||
await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequireUppercase, providerName, providerKey), |
SettingDefinitionManager.Get(IdentitySettingNames.Password.RequireLowercase), |
||||
ValueType.Boolean); |
StringLocalizerFactory, |
||||
passwordSetting.AddDetail( |
await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequireLowercase, providerName, providerKey), |
||||
SettingDefinitionManager.Get(IdentitySettingNames.Password.RequireNonAlphanumeric), |
ValueType.Boolean); |
||||
StringLocalizerFactory, |
passwordSetting.AddDetail( |
||||
await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequireNonAlphanumeric, providerName, providerKey), |
SettingDefinitionManager.Get(IdentitySettingNames.Password.RequireUppercase), |
||||
ValueType.Boolean); |
StringLocalizerFactory, |
||||
|
await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequireUppercase, providerName, providerKey), |
||||
#endregion
|
ValueType.Boolean); |
||||
|
passwordSetting.AddDetail( |
||||
#region 双因素
|
SettingDefinitionManager.Get(IdentitySettingNames.Password.RequireNonAlphanumeric), |
||||
|
StringLocalizerFactory, |
||||
// Removed See: https://github.com/abpframework/abp/pull/7719
|
await SettingManager.GetOrNullAsync(IdentitySettingNames.Password.RequireNonAlphanumeric, providerName, providerKey), |
||||
//var twoFactorSetting = identitySetting.AddSetting(L["DisplayName:Identity.TwoFactor"], L["Description:Identity.TwoFactor"]);
|
ValueType.Boolean); |
||||
//twoFactorSetting.AddDetail(
|
|
||||
// SettingDefinitionManager.Get(IdentitySettingNames.TwoFactor.Behaviour),
|
#endregion
|
||||
// StringLocalizerFactory,
|
|
||||
// await SettingManager.GetOrNullAsync(IdentitySettingNames.TwoFactor.Behaviour, providerName, providerKey),
|
#region 双因素
|
||||
// ValueType.Option)
|
|
||||
// .AddOption(IdentityTwoFactorBehaviour.Optional.ToString(), IdentityTwoFactorBehaviour.Optional.ToString())
|
// Removed See: https://github.com/abpframework/abp/pull/7719
|
||||
// .AddOption(IdentityTwoFactorBehaviour.Forced.ToString(), IdentityTwoFactorBehaviour.Forced.ToString())
|
//var twoFactorSetting = identitySetting.AddSetting(L["DisplayName:Identity.TwoFactor"], L["Description:Identity.TwoFactor"]);
|
||||
// .AddOption(IdentityTwoFactorBehaviour.Disabled.ToString(), IdentityTwoFactorBehaviour.Disabled.ToString());
|
//twoFactorSetting.AddDetail(
|
||||
//twoFactorSetting.AddDetail(
|
// SettingDefinitionManager.Get(IdentitySettingNames.TwoFactor.Behaviour),
|
||||
// SettingDefinitionManager.Get(IdentitySettingNames.TwoFactor.UsersCanChange),
|
// StringLocalizerFactory,
|
||||
// StringLocalizerFactory,
|
// await SettingManager.GetOrNullAsync(IdentitySettingNames.TwoFactor.Behaviour, providerName, providerKey),
|
||||
// await SettingManager.GetOrNullAsync(IdentitySettingNames.TwoFactor.UsersCanChange, providerName, providerKey),
|
// ValueType.Option)
|
||||
// ValueType.Boolean);
|
// .AddOption(IdentityTwoFactorBehaviour.Optional.ToString(), IdentityTwoFactorBehaviour.Optional.ToString())
|
||||
|
// .AddOption(IdentityTwoFactorBehaviour.Forced.ToString(), IdentityTwoFactorBehaviour.Forced.ToString())
|
||||
#endregion
|
// .AddOption(IdentityTwoFactorBehaviour.Disabled.ToString(), IdentityTwoFactorBehaviour.Disabled.ToString());
|
||||
|
//twoFactorSetting.AddDetail(
|
||||
#region 组织机构
|
// SettingDefinitionManager.Get(IdentitySettingNames.TwoFactor.UsersCanChange),
|
||||
|
// StringLocalizerFactory,
|
||||
var ouSetting = identitySetting.AddSetting(L["DisplayName:Identity.OrganizationUnit"], L["Description:Identity.OrganizationUnit"]); |
// await SettingManager.GetOrNullAsync(IdentitySettingNames.TwoFactor.UsersCanChange, providerName, providerKey),
|
||||
ouSetting.AddDetail( |
// ValueType.Boolean);
|
||||
SettingDefinitionManager.Get(IdentitySettingNames.OrganizationUnit.MaxUserMembershipCount), |
|
||||
StringLocalizerFactory, |
#endregion
|
||||
await SettingManager.GetOrNullAsync(IdentitySettingNames.OrganizationUnit.MaxUserMembershipCount, providerName, providerKey), |
|
||||
ValueType.Number); |
#region 组织机构
|
||||
|
|
||||
settingGroups.Add(identitySetting); |
var ouSetting = identitySetting.AddSetting(L["DisplayName:Identity.OrganizationUnit"], L["Description:Identity.OrganizationUnit"]); |
||||
|
ouSetting.AddDetail( |
||||
#endregion
|
SettingDefinitionManager.Get(IdentitySettingNames.OrganizationUnit.MaxUserMembershipCount), |
||||
|
StringLocalizerFactory, |
||||
#endregion
|
await SettingManager.GetOrNullAsync(IdentitySettingNames.OrganizationUnit.MaxUserMembershipCount, providerName, providerKey), |
||||
|
ValueType.Number); |
||||
#region 邮件设置
|
|
||||
|
settingGroups.Add(identitySetting); |
||||
var emailSettingGroup = new SettingGroupDto(L["DisplayName:Emailing"], L["Description:Emailing"]); |
|
||||
var defaultMailSetting = emailSettingGroup.AddSetting(L["DisplayName:Emailing.Default"], L["Description:Emailing.Default"]); |
#endregion
|
||||
defaultMailSetting.AddDetail( |
|
||||
SettingDefinitionManager.Get(EmailSettingNames.DefaultFromAddress), |
#endregion
|
||||
StringLocalizerFactory, |
|
||||
await SettingManager.GetOrNullAsync(EmailSettingNames.DefaultFromAddress, providerName, providerKey), |
#region 邮件设置
|
||||
ValueType.String); |
|
||||
defaultMailSetting.AddDetail( |
var emailSettingGroup = new SettingGroupDto(L["DisplayName:Emailing"], L["Description:Emailing"]); |
||||
SettingDefinitionManager.Get(EmailSettingNames.DefaultFromDisplayName), |
var defaultMailSetting = emailSettingGroup.AddSetting(L["DisplayName:Emailing.Default"], L["Description:Emailing.Default"]); |
||||
StringLocalizerFactory, |
defaultMailSetting.AddDetail( |
||||
await SettingManager.GetOrNullAsync(EmailSettingNames.DefaultFromDisplayName, providerName, providerKey), |
SettingDefinitionManager.Get(EmailSettingNames.DefaultFromAddress), |
||||
ValueType.String); |
StringLocalizerFactory, |
||||
|
await SettingManager.GetOrNullAsync(EmailSettingNames.DefaultFromAddress, providerName, providerKey), |
||||
var smtpSetting = emailSettingGroup.AddSetting(L["DisplayName:Emailing.Smtp"], L["Description:Emailing.Smtp"]); |
ValueType.String); |
||||
smtpSetting.AddDetail( |
defaultMailSetting.AddDetail( |
||||
SettingDefinitionManager.Get(EmailSettingNames.Smtp.EnableSsl), |
SettingDefinitionManager.Get(EmailSettingNames.DefaultFromDisplayName), |
||||
StringLocalizerFactory, |
StringLocalizerFactory, |
||||
await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.EnableSsl, providerName, providerKey), |
await SettingManager.GetOrNullAsync(EmailSettingNames.DefaultFromDisplayName, providerName, providerKey), |
||||
ValueType.Boolean); |
ValueType.String); |
||||
smtpSetting.AddDetail( |
|
||||
SettingDefinitionManager.Get(EmailSettingNames.Smtp.UseDefaultCredentials), |
var smtpSetting = emailSettingGroup.AddSetting(L["DisplayName:Emailing.Smtp"], L["Description:Emailing.Smtp"]); |
||||
StringLocalizerFactory, |
smtpSetting.AddDetail( |
||||
await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.UseDefaultCredentials, providerName, providerKey), |
SettingDefinitionManager.Get(EmailSettingNames.Smtp.EnableSsl), |
||||
ValueType.Boolean); |
StringLocalizerFactory, |
||||
smtpSetting.AddDetail( |
await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.EnableSsl, providerName, providerKey), |
||||
SettingDefinitionManager.Get(EmailSettingNames.Smtp.Domain), |
ValueType.Boolean); |
||||
StringLocalizerFactory, |
smtpSetting.AddDetail( |
||||
await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Domain, providerName, providerKey), |
SettingDefinitionManager.Get(EmailSettingNames.Smtp.UseDefaultCredentials), |
||||
ValueType.String); |
StringLocalizerFactory, |
||||
smtpSetting.AddDetail( |
await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.UseDefaultCredentials, providerName, providerKey), |
||||
SettingDefinitionManager.Get(EmailSettingNames.Smtp.Host), |
ValueType.Boolean); |
||||
StringLocalizerFactory, |
smtpSetting.AddDetail( |
||||
await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Host, providerName, providerKey), |
SettingDefinitionManager.Get(EmailSettingNames.Smtp.Domain), |
||||
ValueType.String); |
StringLocalizerFactory, |
||||
smtpSetting.AddDetail( |
await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Domain, providerName, providerKey), |
||||
SettingDefinitionManager.Get(EmailSettingNames.Smtp.Port), |
ValueType.String); |
||||
StringLocalizerFactory, |
smtpSetting.AddDetail( |
||||
await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Port, providerName, providerKey), |
SettingDefinitionManager.Get(EmailSettingNames.Smtp.Host), |
||||
ValueType.Number); |
StringLocalizerFactory, |
||||
smtpSetting.AddDetail( |
await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Host, providerName, providerKey), |
||||
SettingDefinitionManager.Get(EmailSettingNames.Smtp.UserName), |
ValueType.String); |
||||
StringLocalizerFactory, |
smtpSetting.AddDetail( |
||||
await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.UserName, providerName, providerKey), |
SettingDefinitionManager.Get(EmailSettingNames.Smtp.Port), |
||||
ValueType.String); |
StringLocalizerFactory, |
||||
smtpSetting.AddDetail( |
await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Port, providerName, providerKey), |
||||
SettingDefinitionManager.Get(EmailSettingNames.Smtp.Password), |
ValueType.Number); |
||||
StringLocalizerFactory, |
smtpSetting.AddDetail( |
||||
await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Password, providerName, providerKey), |
SettingDefinitionManager.Get(EmailSettingNames.Smtp.UserName), |
||||
ValueType.String); |
StringLocalizerFactory, |
||||
|
await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.UserName, providerName, providerKey), |
||||
settingGroups.Add(emailSettingGroup); |
ValueType.String); |
||||
|
smtpSetting.AddDetail( |
||||
#endregion
|
SettingDefinitionManager.Get(EmailSettingNames.Smtp.Password), |
||||
|
StringLocalizerFactory, |
||||
return new ListResultDto<SettingGroupDto>(settingGroups); |
await SettingManager.GetOrNullAsync(EmailSettingNames.Smtp.Password, providerName, providerKey), |
||||
} |
ValueType.String); |
||||
} |
|
||||
} |
settingGroups.Add(emailSettingGroup); |
||||
|
|
||||
|
#endregion
|
||||
|
|
||||
|
return new ListResultDto<SettingGroupDto>(settingGroups); |
||||
|
} |
||||
|
|
||||
|
protected virtual async Task CheckFeatureAsync() |
||||
|
{ |
||||
|
await FeatureChecker.CheckEnabledAsync(SettingManagementFeatures.Enable); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|||||
@ -1,53 +1,61 @@ |
|||||
using LINGYUN.Abp.IM; |
using LINGYUN.Abp.IM; |
||||
using LINGYUN.Abp.IM.Messages; |
using LINGYUN.Abp.IM.Messages; |
||||
using LINGYUN.Abp.RealTime; |
using LINGYUN.Abp.RealTime; |
||||
using Microsoft.Extensions.Logging; |
using Microsoft.Extensions.Logging; |
||||
using Microsoft.Extensions.Logging.Abstractions; |
using Microsoft.Extensions.Logging.Abstractions; |
||||
using Microsoft.Extensions.Options; |
using Microsoft.Extensions.Options; |
||||
using System.Threading.Tasks; |
using System.Threading.Tasks; |
||||
using Volo.Abp.DependencyInjection; |
using Volo.Abp.DependencyInjection; |
||||
using Volo.Abp.EventBus.Distributed; |
using Volo.Abp.EventBus.Distributed; |
||||
|
|
||||
namespace LINGYUN.Abp.MessageService.EventBus.Distributed |
namespace LINGYUN.Abp.MessageService.EventBus.Distributed |
||||
{ |
{ |
||||
public class ChatMessageEventHandler : IDistributedEventHandler<RealTimeEto<ChatMessage>>, ITransientDependency |
public class ChatMessageEventHandler : IDistributedEventHandler<RealTimeEto<ChatMessage>>, ITransientDependency |
||||
{ |
{ |
||||
/// <summary>
|
/// <summary>
|
||||
/// Reference to <see cref="ILogger<DefaultNotificationDispatcher>"/>.
|
/// Reference to <see cref="ILogger<DefaultNotificationDispatcher>"/>.
|
||||
/// </summary>
|
/// </summary>
|
||||
public ILogger<ChatMessageEventHandler> Logger { get; set; } |
public ILogger<ChatMessageEventHandler> Logger { get; set; } |
||||
/// <summary>
|
/// <summary>
|
||||
/// Reference to <see cref="AbpIMOptions"/>.
|
/// Reference to <see cref="AbpIMOptions"/>.
|
||||
/// </summary>
|
/// </summary>
|
||||
protected AbpIMOptions Options { get; } |
protected AbpIMOptions Options { get; } |
||||
|
|
||||
protected IMessageStore MessageStore { get; } |
protected IMessageStore MessageStore { get; } |
||||
protected IMessageSenderProviderManager MessageSenderProviderManager { get; } |
protected IMessageBlocker MessageBlocker { get; } |
||||
|
protected IMessageSenderProviderManager MessageSenderProviderManager { get; } |
||||
public ChatMessageEventHandler( |
|
||||
IOptions<AbpIMOptions> options, |
public ChatMessageEventHandler( |
||||
IMessageStore messageStore, |
IOptions<AbpIMOptions> options, |
||||
IMessageSenderProviderManager messageSenderProviderManager) |
IMessageStore messageStore, |
||||
{ |
IMessageBlocker messageBlocker, |
||||
Options = options.Value; |
IMessageSenderProviderManager messageSenderProviderManager) |
||||
MessageStore = messageStore; |
{ |
||||
MessageSenderProviderManager = messageSenderProviderManager; |
Options = options.Value; |
||||
|
MessageStore = messageStore; |
||||
Logger = NullLogger<ChatMessageEventHandler>.Instance; |
MessageBlocker = messageBlocker; |
||||
} |
MessageSenderProviderManager = messageSenderProviderManager; |
||||
|
|
||||
public virtual async Task HandleEventAsync(RealTimeEto<ChatMessage> eventData) |
Logger = NullLogger<ChatMessageEventHandler>.Instance; |
||||
{ |
} |
||||
Logger.LogDebug($"Persistent chat message."); |
|
||||
|
public virtual async Task HandleEventAsync(RealTimeEto<ChatMessage> eventData) |
||||
await MessageStore.StoreMessageAsync(eventData.Data); |
{ |
||||
|
Logger.LogDebug($"Persistent chat message."); |
||||
// 发送消息
|
|
||||
foreach (var provider in MessageSenderProviderManager.Providers) |
var message = eventData.Data; |
||||
{ |
// 消息拦截
|
||||
Logger.LogDebug($"Sending message with provider {provider.Name}"); |
// 扩展敏感词汇过滤
|
||||
await provider.SendMessageAsync(eventData.Data); |
await MessageBlocker.InterceptAsync(message); |
||||
} |
|
||||
} |
await MessageStore.StoreMessageAsync(message); |
||||
} |
|
||||
} |
// 发送消息
|
||||
|
foreach (var provider in MessageSenderProviderManager.Providers) |
||||
|
{ |
||||
|
Logger.LogDebug($"Sending message with provider {provider.Name}"); |
||||
|
await provider.SendMessageAsync(message); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|||||
Loading…
Reference in new issue