Browse Source

Merge pull request #116 from colinin/3.2

backlog of 3.2
pull/177/head 3.2.3
cKey 5 years ago
committed by GitHub
parent
commit
c713130ce0
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 41
      aspnet-core/LINGYUN.MicroService.All.sln
  2. 91
      aspnet-core/LINGYUN.MicroService.ApiGateway.sln
  3. 131
      aspnet-core/LINGYUN.MicroService.BackendAdmin.sln
  4. 285
      aspnet-core/LINGYUN.MicroService.Common.sln
  5. 69
      aspnet-core/LINGYUN.MicroService.IdentityServer.sln
  6. 177
      aspnet-core/LINGYUN.MicroService.IdentityServerAdmin.sln
  7. 174
      aspnet-core/LINGYUN.MicroService.Messages.sln
  8. 115
      aspnet-core/LINGYUN.MicroService.Platform.sln
  9. 20
      aspnet-core/database/ApiGateway-Init-SqlServer.sql
  10. 98
      aspnet-core/database/ApiGateway-Init.sql
  11. 2
      aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN.Abp.Account.Application.csproj
  12. 15
      aspnet-core/modules/common/LINGYUN.Abp.AspNetCore.SignalR.Protocol.Json/LINGYUN.Abp.AspNetCore.SignalR.Protocol.Json.csproj
  13. 22
      aspnet-core/modules/common/LINGYUN.Abp.AspNetCore.SignalR.Protocol.Json/LINGYUN/Abp/AspNetCore/SignalR/Protocol/Json/AbpAspNetCoreSignalRProtocolJsonModule.cs
  14. 14
      aspnet-core/modules/common/LINGYUN.Abp.AspNetCore.SignalR/LINGYUN.Abp.AspNetCore.SignalR.JwtToken.csproj
  15. 25
      aspnet-core/modules/common/LINGYUN.Abp.AspNetCore.SignalR/LINGYUN/Abp/AspNetCore/SignalR/JwtToken/AbpAspNetCoreSignalRJwtTokenMapPathOptions.cs
  16. 18
      aspnet-core/modules/common/LINGYUN.Abp.AspNetCore.SignalR/LINGYUN/Abp/AspNetCore/SignalR/JwtToken/AbpAspNetCoreSignalRJwtTokenModule.cs
  17. 0
      aspnet-core/modules/common/LINGYUN.Abp.AspNetCore.SignalR/Microsoft/AspNetCore/Builder/SignalRJwtTokenApplicationBuilderExtensions.cs
  18. 45
      aspnet-core/modules/common/LINGYUN.Abp.AspNetCore.SignalR/Microsoft/AspNetCore/Http/SignalRJwtTokenMiddleware.cs
  19. 15
      aspnet-core/modules/common/LINGYUN.Abp.ExceptionHandling.Notifications/LINGYUN.Abp.ExceptionHandling.Notifications.csproj
  20. 22
      aspnet-core/modules/common/LINGYUN.Abp.ExceptionHandling.Notifications/LINGYUN/Abp/ExceptionHandling/Notifications/AbpExceptionHandlingNotificationDefinitionProvider.cs
  21. 3
      aspnet-core/modules/common/LINGYUN.Abp.ExceptionHandling.Notifications/LINGYUN/Abp/ExceptionHandling/Notifications/AbpExceptionHandlingNotificationNames.cs
  22. 19
      aspnet-core/modules/common/LINGYUN.Abp.ExceptionHandling.Notifications/LINGYUN/Abp/ExceptionHandling/Notifications/AbpNotificationsExceptionHandlingModule.cs
  23. 29
      aspnet-core/modules/common/LINGYUN.Abp.ExceptionHandling.Notifications/LINGYUN/Abp/ExceptionHandling/Notifications/AbpNotificationsExceptionSubscriber.cs
  24. 7
      aspnet-core/modules/common/LINGYUN.Abp.ExceptionHandling.Notifications/LINGYUN/Abp/ExceptionHandling/Notifications/Localization/Resources/en.json
  25. 7
      aspnet-core/modules/common/LINGYUN.Abp.ExceptionHandling.Notifications/LINGYUN/Abp/ExceptionHandling/Notifications/Localization/Resources/zh-Hans.json
  26. 2
      aspnet-core/modules/common/LINGYUN.Abp.ExceptionHandling/LINGYUN.Abp.ExceptionHandling.csproj
  27. 12
      aspnet-core/modules/common/LINGYUN.Abp.ExceptionHandling/LINGYUN/Abp/ExceptionHandling/AbpExceptionHandlingModule.cs
  28. 9
      aspnet-core/modules/common/LINGYUN.Abp.ExceptionHandling/LINGYUN/Abp/ExceptionHandling/Localization/ExceptionHandlingResource.cs
  29. 4
      aspnet-core/modules/common/LINGYUN.Abp.IM.SignalR/LINGYUN.Abp.IM.SignalR.csproj
  30. 21
      aspnet-core/modules/common/LINGYUN.Abp.IM.SignalR/LINGYUN/Abp/IM/SignalR/AbpIMSignalRModule.cs
  31. 94
      aspnet-core/modules/common/LINGYUN.Abp.IM.SignalR/LINGYUN/Abp/IM/SignalR/Hubs/MessageHub.cs
  32. 122
      aspnet-core/modules/common/LINGYUN.Abp.IM.SignalR/LINGYUN/Abp/IM/SignalR/Hubs/MessagesHub.cs
  33. 101
      aspnet-core/modules/common/LINGYUN.Abp.IM.SignalR/LINGYUN/Abp/IM/SignalR/Messages/SignalRMessageSender.cs
  34. 65
      aspnet-core/modules/common/LINGYUN.Abp.IM.SignalR/LINGYUN/Abp/IM/SignalR/Messages/SignalRMessageSenderProvider.cs
  35. 83
      aspnet-core/modules/common/LINGYUN.Abp.IM.SignalR/LINGYUN/Abp/IM/SignalR/OnlineClientHubBase.cs
  36. 1
      aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN.Abp.IM.csproj
  37. 10
      aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/AbpIMModule.cs
  38. 15
      aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/AbpIMOptions.cs
  39. 161
      aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Contract/IFriendStore.cs
  40. 12
      aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Contract/UserAddFriendResult.cs
  41. 46
      aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Contract/UserFriend.cs
  42. 17
      aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Contract/UserFriendGroup.cs
  43. 14
      aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Contract/UserFriendStatus.cs
  44. 12
      aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Group/GroupUserCard.cs
  45. 61
      aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Group/IUserGroupStore.cs
  46. 60
      aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/IUserCardFinder.cs
  47. 70
      aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/ChatMessage.cs
  48. 10
      aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/IMessageSenderProvider.cs
  49. 9
      aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/IMessageSenderProviderManager.cs
  50. 67
      aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/IMessageStore.cs
  51. 9
      aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/LastChatMessage.cs
  52. 26
      aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/MessageSender.cs
  53. 70
      aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/MessageSenderProviderBase.cs
  54. 33
      aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/MessageSenderProviderManager.cs
  55. 22
      aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/MessageType.cs
  56. 9
      aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Sex.cs
  57. 25
      aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/UserCard.cs
  58. 3
      aspnet-core/modules/common/LINGYUN.Abp.Notifications.SignalR/LINGYUN.Abp.Notifications.SignalR.csproj
  59. 13
      aspnet-core/modules/common/LINGYUN.Abp.Notifications.SignalR/LINGYUN/Abp/Notifications/SignalR/AbpNotificationsSignalRModule.cs
  60. 61
      aspnet-core/modules/common/LINGYUN.Abp.Notifications.SignalR/LINGYUN/Abp/Notifications/SignalR/Hubs/NotificationsHub.cs
  61. 82
      aspnet-core/modules/common/LINGYUN.Abp.Notifications.SignalR/LINGYUN/Abp/Notifications/SignalR/OnlineClientHubBase.cs
  62. 54
      aspnet-core/modules/common/LINGYUN.Abp.Notifications.SignalR/LINGYUN/Abp/Notifications/SignalR/SignalRNotificationPublishProvider.cs
  63. 25
      aspnet-core/modules/common/LINGYUN.Abp.Notifications.SignalR/Microsoft/AspNetCore/Http/SignalRJwtTokenMiddleware.cs
  64. 5
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/AbpNotificationModule.cs
  65. 15
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/INotificationDefinitionContext.cs
  66. 6
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/INotificationDefinitionManager.cs
  67. 41
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/INotificationDispatcher.cs
  68. 41
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/INotificationSender.cs
  69. 151
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/INotificationStore.cs
  70. 53
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/INotificationSubscriptionManager.cs
  71. 220
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/Internal/DefaultNotificationDispatcher.cs
  72. 78
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/Internal/NotificationSender.cs
  73. 72
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/Internal/NotificationSubscriptionManager.cs
  74. 23
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/LocalizableStringInfo.cs
  75. 96
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationData.cs
  76. 31
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationDataConverter.cs
  77. 14
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationDataMappingDictionary.cs
  78. 27
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationDefinition.cs
  79. 46
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationDefinitionContext.cs
  80. 78
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationDefinitionManager.cs
  81. 30
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationEventData.cs
  82. 70
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationGroupDefinition.cs
  83. 30
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationInfo.cs
  84. 14
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationName.cs
  85. 15
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationNameNormalizer.cs
  86. 4
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationPublishJob.cs
  87. 12
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationPublishProvider.cs
  88. 123
      aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NullNotificationStore.cs
  89. 18
      aspnet-core/modules/common/LINGYUN.Abp.RealTime.SignalR/LINGYUN.Abp.RealTime.SignalR.csproj
  90. 12
      aspnet-core/modules/common/LINGYUN.Abp.RealTime.SignalR/LINGYUN/Abp/RealTime/SignalR/AbpRealTimeSignalRModule.cs
  91. 94
      aspnet-core/modules/common/LINGYUN.Abp.RealTime.SignalR/LINGYUN/Abp/RealTime/SignalR/Hubs/OnlineClientHubBase.cs
  92. 10
      aspnet-core/modules/common/LINGYUN.Abp.RealTime/LINGYUN/Abp/RealTime/Client/IClient.cs
  93. 6
      aspnet-core/modules/common/LINGYUN.Abp.RealTime/LINGYUN/Abp/RealTime/Client/IOnlineClient.cs
  94. 3
      aspnet-core/modules/common/LINGYUN.Abp.RealTime/LINGYUN/Abp/RealTime/Client/IOnlineClientManager.cs
  95. 6
      aspnet-core/modules/common/LINGYUN.Abp.RealTime/LINGYUN/Abp/RealTime/Client/IOnlineClientStore.cs
  96. 12
      aspnet-core/modules/common/LINGYUN.Abp.RealTime/LINGYUN/Abp/RealTime/Client/InMemoryOnlineClientStore.cs
  97. 11
      aspnet-core/modules/common/LINGYUN.Abp.RealTime/LINGYUN/Abp/RealTime/Client/OnlineClient.cs
  98. 11
      aspnet-core/modules/common/LINGYUN.Abp.RealTime/LINGYUN/Abp/RealTime/Client/OnlineClientManager.cs
  99. 9
      aspnet-core/modules/common/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/OpenId/IWeChatOpenIdFinder.cs
  100. 9
      aspnet-core/modules/common/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/Token/IWeChatTokenProvider.cs

41
aspnet-core/LINGYUN.MicroService.sln → aspnet-core/LINGYUN.MicroService.All.sln

@ -115,9 +115,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.WeChatValidator", "modules\identityServer\LINGYUN.Abp.IdentityServer.WeChatValidator\LINGYUN.Abp.IdentityServer.WeChatValidator.csproj", "{02043AD5-5E06-4EDD-8162-983E766C38EC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.WeChat.WeApp", "modules\common\LINGYUN.Abp.Notifications.WeChat\LINGYUN.Abp.Notifications.WeChat.WeApp.csproj", "{85EF4251-EFC4-4CC9-912B-EA5DB1E2E359}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.WeChat.WeApp", "modules\wechat\LINGYUN.Abp.Notifications.WeChat\LINGYUN.Abp.Notifications.WeChat.WeApp.csproj", "{85EF4251-EFC4-4CC9-912B-EA5DB1E2E359}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Authorization", "modules\common\LINGYUN.Abp.WeChat.Authorization\LINGYUN.Abp.WeChat.Authorization.csproj", "{263A8A1C-69D0-4C3F-B33E-8F0831C146EB}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Authorization", "modules\wechat\LINGYUN.Abp.WeChat.Authorization\LINGYUN.Abp.WeChat.Authorization.csproj", "{263A8A1C-69D0-4C3F-B33E-8F0831C146EB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Hangfire.Storage.MySql", "modules\common\LINGYUN.Abp.Hangfire.MySqlStorage\LINGYUN.Abp.Hangfire.Storage.MySql.csproj", "{47CC8F7A-681D-42B9-AE04-78453782C1B6}"
EndProject
@ -249,7 +249,17 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManag
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Domain.Identity", "modules\identity\LINGYUN.Abp.PermissionManagement.Domain.Identity\LINGYUN.Abp.PermissionManagement.Domain.Identity.csproj", "{2D377D3A-70EC-4BB3-9F4C-6C933693DA98}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Account.Web", "modules\account\LINGYUN.Abp.Account.Web\LINGYUN.Abp.Account.Web.csproj", "{5F43141B-6C63-4547-B9D6-D69EC3D7CA7E}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.Web", "modules\account\LINGYUN.Abp.Account.Web\LINGYUN.Abp.Account.Web.csproj", "{5F43141B-6C63-4547-B9D6-D69EC3D7CA7E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.SignalR.JwtToken", "modules\common\LINGYUN.Abp.AspNetCore.SignalR\LINGYUN.Abp.AspNetCore.SignalR.JwtToken.csproj", "{A66D48C9-F141-4111-9169-CEB64AFFF61D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RealTime.SignalR", "modules\common\LINGYUN.Abp.RealTime.SignalR\LINGYUN.Abp.RealTime.SignalR.csproj", "{524276E1-053D-4191-ABF7-4CDA01BFFBC3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.SignalR.Protocol.Json", "modules\common\LINGYUN.Abp.AspNetCore.SignalR.Protocol.Json\LINGYUN.Abp.AspNetCore.SignalR.Protocol.Json.csproj", "{43083268-74DE-4C68-824A-FB0CEC77358D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wechat", "wechat", "{DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WeChat", "modules\wechat\LINGYUN.Abp.WeChat\LINGYUN.Abp.WeChat.csproj", "{BAE74ABC-1096-495F-A624-BEBFBC1896F2}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -665,6 +675,22 @@ Global
{5F43141B-6C63-4547-B9D6-D69EC3D7CA7E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5F43141B-6C63-4547-B9D6-D69EC3D7CA7E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5F43141B-6C63-4547-B9D6-D69EC3D7CA7E}.Release|Any CPU.Build.0 = Release|Any CPU
{A66D48C9-F141-4111-9169-CEB64AFFF61D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A66D48C9-F141-4111-9169-CEB64AFFF61D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A66D48C9-F141-4111-9169-CEB64AFFF61D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A66D48C9-F141-4111-9169-CEB64AFFF61D}.Release|Any CPU.Build.0 = Release|Any CPU
{524276E1-053D-4191-ABF7-4CDA01BFFBC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{524276E1-053D-4191-ABF7-4CDA01BFFBC3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{524276E1-053D-4191-ABF7-4CDA01BFFBC3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{524276E1-053D-4191-ABF7-4CDA01BFFBC3}.Release|Any CPU.Build.0 = Release|Any CPU
{43083268-74DE-4C68-824A-FB0CEC77358D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{43083268-74DE-4C68-824A-FB0CEC77358D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{43083268-74DE-4C68-824A-FB0CEC77358D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{43083268-74DE-4C68-824A-FB0CEC77358D}.Release|Any CPU.Build.0 = Release|Any CPU
{BAE74ABC-1096-495F-A624-BEBFBC1896F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BAE74ABC-1096-495F-A624-BEBFBC1896F2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BAE74ABC-1096-495F-A624-BEBFBC1896F2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BAE74ABC-1096-495F-A624-BEBFBC1896F2}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -724,8 +750,8 @@ Global
{0D1DB712-B48D-4FB7-9A47-694C668A62E3} = {608A3BD0-FC8D-48B0-B1C5-F3203A3BE99F}
{9E12ADBF-713B-4FE7-B71F-52B5078A57CE} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D}
{02043AD5-5E06-4EDD-8162-983E766C38EC} = {0439B173-F41E-4CE0-A44A-CCB70328F272}
{85EF4251-EFC4-4CC9-912B-EA5DB1E2E359} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
{263A8A1C-69D0-4C3F-B33E-8F0831C146EB} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
{85EF4251-EFC4-4CC9-912B-EA5DB1E2E359} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21}
{263A8A1C-69D0-4C3F-B33E-8F0831C146EB} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21}
{47CC8F7A-681D-42B9-AE04-78453782C1B6} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
{F595CB9F-B117-4D62-A1AE-48599927DB36} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
{5CF403B2-47C9-4E4E-8856-0294BDD64884} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
@ -791,6 +817,11 @@ Global
{B46D6DAF-98C6-441F-9FA5-3CAD7CF27727} = {CC362C67-6FC1-42B3-A130-8120AA8D790C}
{2D377D3A-70EC-4BB3-9F4C-6C933693DA98} = {52B5D4F7-237B-4E0A-A167-68442164F70A}
{5F43141B-6C63-4547-B9D6-D69EC3D7CA7E} = {9E72FEB9-A626-4312-892B-CDD043879758}
{A66D48C9-F141-4111-9169-CEB64AFFF61D} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
{524276E1-053D-4191-ABF7-4CDA01BFFBC3} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
{43083268-74DE-4C68-824A-FB0CEC77358D} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E}
{DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} = {C5CAD011-DF84-4914-939C-0C029DCEF26F}
{BAE74ABC-1096-495F-A624-BEBFBC1896F2} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {C95FDF91-16F2-4A8B-A4BE-0E62D1B66718}

91
aspnet-core/LINGYUN.MicroService.ApiGateway.sln

@ -0,0 +1,91 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30011.22
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "modules", "modules", "{630FB448-8C5C-438F-930D-B0209407DE6A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "services", "services", "{F3B1B755-37B6-420B-9E82-A5BDFF2BF647}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "apigateway", "apigateway", "{AD93DD04-989C-40BE-A3F4-25DABF290423}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.ApiGateway.Host", "services\apigateway\LINGYUN.ApiGateway.Host\LINGYUN.ApiGateway.Host.csproj", "{A9D125BB-3C5A-4083-AD30-B88947460556}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.ApiGateway.HttpApi.Host", "services\apigateway\LINGYUN.ApiGateway.HttpApi.Host\LINGYUN.ApiGateway.HttpApi.Host.csproj", "{54987DD7-5311-430D-BAFF-9F856468C893}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.ApiGateway.Domain.Shared", "modules\apigateway\LINGYUN.ApiGateway.Domain.Shared\LINGYUN.ApiGateway.Domain.Shared.csproj", "{DE80ED02-D021-497A-94D9-AD0BA042EA3F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.ApiGateway.Domain", "modules\apigateway\LINGYUN.ApiGateway.Domain\LINGYUN.ApiGateway.Domain.csproj", "{38A8F904-E894-4C3D-9C35-DCD6E544AE43}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.ApiGateway.Application.Contracts", "modules\apigateway\LINGYUN.ApiGateway.Application.Contracts\LINGYUN.ApiGateway.Application.Contracts.csproj", "{F716F299-267B-430C-BC7F-ECE7E8AB2351}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.ApiGateway.Application", "modules\apigateway\LINGYUN.ApiGateway.Application\LINGYUN.ApiGateway.Application.csproj", "{B045F4B7-AE0E-4403-B7C2-A66B06CF6A62}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.ApiGateway.EntityFrameworkCore", "modules\apigateway\LINGYUN.ApiGateway.EntityFrameworkCore\LINGYUN.ApiGateway.EntityFrameworkCore.csproj", "{4D686265-3927-43F5-B9BF-8A013F8BC9E8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.ApiGateway.HttpApi", "modules\apigateway\LINGYUN.ApiGateway.HttpApi\LINGYUN.ApiGateway.HttpApi.csproj", "{D890BEBE-563A-47ED-B767-2E80077B5D37}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.ApiGateway.HttpApi.Client", "modules\apigateway\LINGYUN.ApiGateway.HttpApi.Client\LINGYUN.ApiGateway.HttpApi.Client.csproj", "{4757C7D9-6AE9-477D-9829-55D9906AC3E6}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{A9D125BB-3C5A-4083-AD30-B88947460556}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A9D125BB-3C5A-4083-AD30-B88947460556}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A9D125BB-3C5A-4083-AD30-B88947460556}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A9D125BB-3C5A-4083-AD30-B88947460556}.Release|Any CPU.Build.0 = Release|Any CPU
{54987DD7-5311-430D-BAFF-9F856468C893}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{54987DD7-5311-430D-BAFF-9F856468C893}.Debug|Any CPU.Build.0 = Debug|Any CPU
{54987DD7-5311-430D-BAFF-9F856468C893}.Release|Any CPU.ActiveCfg = Release|Any CPU
{54987DD7-5311-430D-BAFF-9F856468C893}.Release|Any CPU.Build.0 = Release|Any CPU
{DE80ED02-D021-497A-94D9-AD0BA042EA3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DE80ED02-D021-497A-94D9-AD0BA042EA3F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DE80ED02-D021-497A-94D9-AD0BA042EA3F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DE80ED02-D021-497A-94D9-AD0BA042EA3F}.Release|Any CPU.Build.0 = Release|Any CPU
{38A8F904-E894-4C3D-9C35-DCD6E544AE43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{38A8F904-E894-4C3D-9C35-DCD6E544AE43}.Debug|Any CPU.Build.0 = Debug|Any CPU
{38A8F904-E894-4C3D-9C35-DCD6E544AE43}.Release|Any CPU.ActiveCfg = Release|Any CPU
{38A8F904-E894-4C3D-9C35-DCD6E544AE43}.Release|Any CPU.Build.0 = Release|Any CPU
{F716F299-267B-430C-BC7F-ECE7E8AB2351}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F716F299-267B-430C-BC7F-ECE7E8AB2351}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F716F299-267B-430C-BC7F-ECE7E8AB2351}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F716F299-267B-430C-BC7F-ECE7E8AB2351}.Release|Any CPU.Build.0 = Release|Any CPU
{B045F4B7-AE0E-4403-B7C2-A66B06CF6A62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B045F4B7-AE0E-4403-B7C2-A66B06CF6A62}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B045F4B7-AE0E-4403-B7C2-A66B06CF6A62}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B045F4B7-AE0E-4403-B7C2-A66B06CF6A62}.Release|Any CPU.Build.0 = Release|Any CPU
{4D686265-3927-43F5-B9BF-8A013F8BC9E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4D686265-3927-43F5-B9BF-8A013F8BC9E8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4D686265-3927-43F5-B9BF-8A013F8BC9E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4D686265-3927-43F5-B9BF-8A013F8BC9E8}.Release|Any CPU.Build.0 = Release|Any CPU
{D890BEBE-563A-47ED-B767-2E80077B5D37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D890BEBE-563A-47ED-B767-2E80077B5D37}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D890BEBE-563A-47ED-B767-2E80077B5D37}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D890BEBE-563A-47ED-B767-2E80077B5D37}.Release|Any CPU.Build.0 = Release|Any CPU
{4757C7D9-6AE9-477D-9829-55D9906AC3E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4757C7D9-6AE9-477D-9829-55D9906AC3E6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4757C7D9-6AE9-477D-9829-55D9906AC3E6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4757C7D9-6AE9-477D-9829-55D9906AC3E6}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{AD93DD04-989C-40BE-A3F4-25DABF290423} = {630FB448-8C5C-438F-930D-B0209407DE6A}
{A9D125BB-3C5A-4083-AD30-B88947460556} = {F3B1B755-37B6-420B-9E82-A5BDFF2BF647}
{54987DD7-5311-430D-BAFF-9F856468C893} = {F3B1B755-37B6-420B-9E82-A5BDFF2BF647}
{DE80ED02-D021-497A-94D9-AD0BA042EA3F} = {AD93DD04-989C-40BE-A3F4-25DABF290423}
{38A8F904-E894-4C3D-9C35-DCD6E544AE43} = {AD93DD04-989C-40BE-A3F4-25DABF290423}
{F716F299-267B-430C-BC7F-ECE7E8AB2351} = {AD93DD04-989C-40BE-A3F4-25DABF290423}
{B045F4B7-AE0E-4403-B7C2-A66B06CF6A62} = {AD93DD04-989C-40BE-A3F4-25DABF290423}
{4D686265-3927-43F5-B9BF-8A013F8BC9E8} = {AD93DD04-989C-40BE-A3F4-25DABF290423}
{D890BEBE-563A-47ED-B767-2E80077B5D37} = {AD93DD04-989C-40BE-A3F4-25DABF290423}
{4757C7D9-6AE9-477D-9829-55D9906AC3E6} = {AD93DD04-989C-40BE-A3F4-25DABF290423}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {B327C65A-BD15-480D-825E-9D5A870C521A}
EndGlobalSection
EndGlobal

131
aspnet-core/LINGYUN.MicroService.BackendAdmin.sln

@ -0,0 +1,131 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30011.22
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "modules", "modules", "{ED23B2F3-87C1-44B6-8906-9DE739422C2C}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "services", "services", "{1E8D56FE-2FA1-4041-AB69-00952BF42EC9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackendAdmin.HttpApi.Host", "services\admin\LINGYUN.Abp.BackendAdmin.HttpApi.Host\LINGYUN.Abp.BackendAdmin.HttpApi.Host.csproj", "{A12DB303-F90B-4E56-B99F-A40816FCB04A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tenant-management", "tenant-management", "{CB1A2EB0-34D4-41C4-BF01-C99EFBBF09EE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TenantManagement.Application.Contracts", "modules\tenants\LINGYUN.Abp.TenantManagement.Application.Contracts\LINGYUN.Abp.TenantManagement.Application.Contracts.csproj", "{926E8543-6A0E-4B36-8F3C-9278281E3420}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TenantManagement.Application", "modules\tenants\LINGYUN.Abp.TenantManagement.Application\LINGYUN.Abp.TenantManagement.Application.csproj", "{0DDA914E-CE2A-446F-A43D-09C52704D39C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TenantManagement.HttpApi", "modules\tenants\LINGYUN.Abp.TenantManagement.HttpApi\LINGYUN.Abp.TenantManagement.HttpApi.csproj", "{E7185ACE-4D40-4215-BBD7-73D2DB69F482}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TenantManagement.HttpApi.Client", "modules\tenants\LINGYUN.Abp.TenantManagement.HttpApi.Client\LINGYUN.Abp.TenantManagement.HttpApi.Client.csproj", "{011F5FF0-468F-4423-8DC3-C3ECC3F63829}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "setting-management", "setting-management", "{202AC90B-0E4A-44B4-9A9D-3C869D0D4B8E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.SettingManagement.Application.Contracts", "modules\settings\LINGYUN.Abp.SettingManagement.Application.Contracts\LINGYUN.Abp.SettingManagement.Application.Contracts.csproj", "{35A4661D-12A0-47A9-ACC6-111D1474A88B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.SettingManagement.Application", "modules\settings\LINGYUN.Abp.SettingManagement.Application\LINGYUN.Abp.SettingManagement.Application.csproj", "{9EAAB564-5971-4AE3-9228-3953C228A890}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.SettingManagement.HttpApi", "modules\settings\LINGYUN.Abp.SettingManagement.HttpApi\LINGYUN.Abp.SettingManagement.HttpApi.csproj", "{5BAC138C-2AD5-426E-9D85-BDC6A0B38787}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "auditing", "auditing", "{709E77F9-DABF-47D3-A86E-40CD5448B1E5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Auditing.Application.Contracts", "modules\auditing\LINGYUN.Abp.Auditing.Application.Contracts\LINGYUN.Abp.Auditing.Application.Contracts.csproj", "{BE063443-09F6-4611-AE17-811AD00D51E9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Auditing.Application", "modules\auditing\LINGYUN.Abp.Auditing.Application\LINGYUN.Abp.Auditing.Application.csproj", "{69CBAE90-D5BE-4362-98DE-1505A59DD0A6}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Auditing.HttpApi", "modules\auditing\LINGYUN.Abp.Auditing.HttpApi\LINGYUN.Abp.Auditing.HttpApi.csproj", "{DAD70E78-D4A1-4B19-AF11-9236825FF013}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identity", "identity", "{2F56344F-6E06-4F9B-A0F2-8A6F0AEB096A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Domain.Identity", "modules\identity\LINGYUN.Abp.PermissionManagement.Domain.Identity\LINGYUN.Abp.PermissionManagement.Domain.Identity.csproj", "{376B2235-ADA7-4EC7-A27D-8F97EC6A57CD}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "permissions-management", "permissions-management", "{D25C4814-71AB-4A9D-8C76-298A7DE1A747}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Domain", "modules\permissions-management\LINGYUN.Abp.PermissionManagement.Domain\LINGYUN.Abp.PermissionManagement.Domain.csproj", "{7521486D-2144-4AFA-86AD-8E8021479DE6}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{A12DB303-F90B-4E56-B99F-A40816FCB04A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A12DB303-F90B-4E56-B99F-A40816FCB04A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A12DB303-F90B-4E56-B99F-A40816FCB04A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A12DB303-F90B-4E56-B99F-A40816FCB04A}.Release|Any CPU.Build.0 = Release|Any CPU
{926E8543-6A0E-4B36-8F3C-9278281E3420}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{926E8543-6A0E-4B36-8F3C-9278281E3420}.Debug|Any CPU.Build.0 = Debug|Any CPU
{926E8543-6A0E-4B36-8F3C-9278281E3420}.Release|Any CPU.ActiveCfg = Release|Any CPU
{926E8543-6A0E-4B36-8F3C-9278281E3420}.Release|Any CPU.Build.0 = Release|Any CPU
{0DDA914E-CE2A-446F-A43D-09C52704D39C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0DDA914E-CE2A-446F-A43D-09C52704D39C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0DDA914E-CE2A-446F-A43D-09C52704D39C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0DDA914E-CE2A-446F-A43D-09C52704D39C}.Release|Any CPU.Build.0 = Release|Any CPU
{E7185ACE-4D40-4215-BBD7-73D2DB69F482}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E7185ACE-4D40-4215-BBD7-73D2DB69F482}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E7185ACE-4D40-4215-BBD7-73D2DB69F482}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E7185ACE-4D40-4215-BBD7-73D2DB69F482}.Release|Any CPU.Build.0 = Release|Any CPU
{011F5FF0-468F-4423-8DC3-C3ECC3F63829}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{011F5FF0-468F-4423-8DC3-C3ECC3F63829}.Debug|Any CPU.Build.0 = Debug|Any CPU
{011F5FF0-468F-4423-8DC3-C3ECC3F63829}.Release|Any CPU.ActiveCfg = Release|Any CPU
{011F5FF0-468F-4423-8DC3-C3ECC3F63829}.Release|Any CPU.Build.0 = Release|Any CPU
{35A4661D-12A0-47A9-ACC6-111D1474A88B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{35A4661D-12A0-47A9-ACC6-111D1474A88B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{35A4661D-12A0-47A9-ACC6-111D1474A88B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{35A4661D-12A0-47A9-ACC6-111D1474A88B}.Release|Any CPU.Build.0 = Release|Any CPU
{9EAAB564-5971-4AE3-9228-3953C228A890}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9EAAB564-5971-4AE3-9228-3953C228A890}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9EAAB564-5971-4AE3-9228-3953C228A890}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9EAAB564-5971-4AE3-9228-3953C228A890}.Release|Any CPU.Build.0 = Release|Any CPU
{5BAC138C-2AD5-426E-9D85-BDC6A0B38787}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5BAC138C-2AD5-426E-9D85-BDC6A0B38787}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5BAC138C-2AD5-426E-9D85-BDC6A0B38787}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5BAC138C-2AD5-426E-9D85-BDC6A0B38787}.Release|Any CPU.Build.0 = Release|Any CPU
{BE063443-09F6-4611-AE17-811AD00D51E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BE063443-09F6-4611-AE17-811AD00D51E9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BE063443-09F6-4611-AE17-811AD00D51E9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BE063443-09F6-4611-AE17-811AD00D51E9}.Release|Any CPU.Build.0 = Release|Any CPU
{69CBAE90-D5BE-4362-98DE-1505A59DD0A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{69CBAE90-D5BE-4362-98DE-1505A59DD0A6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{69CBAE90-D5BE-4362-98DE-1505A59DD0A6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{69CBAE90-D5BE-4362-98DE-1505A59DD0A6}.Release|Any CPU.Build.0 = Release|Any CPU
{DAD70E78-D4A1-4B19-AF11-9236825FF013}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DAD70E78-D4A1-4B19-AF11-9236825FF013}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DAD70E78-D4A1-4B19-AF11-9236825FF013}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DAD70E78-D4A1-4B19-AF11-9236825FF013}.Release|Any CPU.Build.0 = Release|Any CPU
{376B2235-ADA7-4EC7-A27D-8F97EC6A57CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{376B2235-ADA7-4EC7-A27D-8F97EC6A57CD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{376B2235-ADA7-4EC7-A27D-8F97EC6A57CD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{376B2235-ADA7-4EC7-A27D-8F97EC6A57CD}.Release|Any CPU.Build.0 = Release|Any CPU
{7521486D-2144-4AFA-86AD-8E8021479DE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7521486D-2144-4AFA-86AD-8E8021479DE6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7521486D-2144-4AFA-86AD-8E8021479DE6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7521486D-2144-4AFA-86AD-8E8021479DE6}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{A12DB303-F90B-4E56-B99F-A40816FCB04A} = {1E8D56FE-2FA1-4041-AB69-00952BF42EC9}
{CB1A2EB0-34D4-41C4-BF01-C99EFBBF09EE} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C}
{926E8543-6A0E-4B36-8F3C-9278281E3420} = {CB1A2EB0-34D4-41C4-BF01-C99EFBBF09EE}
{0DDA914E-CE2A-446F-A43D-09C52704D39C} = {CB1A2EB0-34D4-41C4-BF01-C99EFBBF09EE}
{E7185ACE-4D40-4215-BBD7-73D2DB69F482} = {CB1A2EB0-34D4-41C4-BF01-C99EFBBF09EE}
{011F5FF0-468F-4423-8DC3-C3ECC3F63829} = {CB1A2EB0-34D4-41C4-BF01-C99EFBBF09EE}
{202AC90B-0E4A-44B4-9A9D-3C869D0D4B8E} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C}
{35A4661D-12A0-47A9-ACC6-111D1474A88B} = {202AC90B-0E4A-44B4-9A9D-3C869D0D4B8E}
{9EAAB564-5971-4AE3-9228-3953C228A890} = {202AC90B-0E4A-44B4-9A9D-3C869D0D4B8E}
{5BAC138C-2AD5-426E-9D85-BDC6A0B38787} = {202AC90B-0E4A-44B4-9A9D-3C869D0D4B8E}
{709E77F9-DABF-47D3-A86E-40CD5448B1E5} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C}
{BE063443-09F6-4611-AE17-811AD00D51E9} = {709E77F9-DABF-47D3-A86E-40CD5448B1E5}
{69CBAE90-D5BE-4362-98DE-1505A59DD0A6} = {709E77F9-DABF-47D3-A86E-40CD5448B1E5}
{DAD70E78-D4A1-4B19-AF11-9236825FF013} = {709E77F9-DABF-47D3-A86E-40CD5448B1E5}
{2F56344F-6E06-4F9B-A0F2-8A6F0AEB096A} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C}
{376B2235-ADA7-4EC7-A27D-8F97EC6A57CD} = {2F56344F-6E06-4F9B-A0F2-8A6F0AEB096A}
{D25C4814-71AB-4A9D-8C76-298A7DE1A747} = {ED23B2F3-87C1-44B6-8906-9DE739422C2C}
{7521486D-2144-4AFA-86AD-8E8021479DE6} = {D25C4814-71AB-4A9D-8C76-298A7DE1A747}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {1573B900-87BA-4AD3-B785-6DD78127ADEF}
EndGlobalSection
EndGlobal

285
aspnet-core/LINGYUN.MicroService.Common.sln

@ -0,0 +1,285 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30011.22
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "modules", "modules", "{02EA4E78-5891-43BC-944F-3E52FEE032E4}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "common", "common", "{086BE5BE-8594-4DA7-8819-935FEF76DABD}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IM", "modules\common\LINGYUN.Abp.IM\LINGYUN.Abp.IM.csproj", "{5A87E9DD-3340-44DC-9564-4D8832A0228E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RealTime", "modules\common\LINGYUN.Abp.RealTime\LINGYUN.Abp.RealTime.csproj", "{E9BE3C65-2AB2-4CE8-8EB9-5C91B329ADB4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RealTime.SignalR", "modules\common\LINGYUN.Abp.RealTime.SignalR\LINGYUN.Abp.RealTime.SignalR.csproj", "{824CB367-383B-48B2-972D-33923438A9A0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.SignalR.Protocol.Json", "modules\common\LINGYUN.Abp.AspNetCore.SignalR.Protocol.Json\LINGYUN.Abp.AspNetCore.SignalR.Protocol.Json.csproj", "{E9AEC9D6-1FE7-4B00-BAC5-2C3D4B63CCA2}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.SignalR.JwtToken", "modules\common\LINGYUN.Abp.AspNetCore.SignalR\LINGYUN.Abp.AspNetCore.SignalR.JwtToken.csproj", "{304D06E6-41EC-4DCB-AEAE-DBEEC75F9ADC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Aliyun.Authorization", "modules\common\LINGYUN.Abp.Aliyun.Authorization\LINGYUN.Abp.Aliyun.Authorization.csproj", "{58777534-1AEF-4D1B-807C-1070D6CB1D48}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundJobs", "modules\common\LINGYUN.Abp.BackgroundJobs\LINGYUN.Abp.BackgroundJobs.csproj", "{FFC21AA5-8DCF-4514-95F0-9A1D428095F8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundJobs.Hangfire", "modules\common\LINGYUN.Abp.BackgroundJobs.Hangfire\LINGYUN.Abp.BackgroundJobs.Hangfire.csproj", "{492710E6-EEF5-4390-A474-8FB2412ECBE5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BlobStoring.Aliyun", "modules\common\LINGYUN.Abp.BlobStoring.Aliyun\LINGYUN.Abp.BlobStoring.Aliyun.csproj", "{CCF1EB86-29BD-4531-BB27-C9111CC67570}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DistributedLock", "modules\common\LINGYUN.Abp.DistributedLock\LINGYUN.Abp.DistributedLock.csproj", "{4BD715F2-D117-45FB-B26C-F92D912144C7}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DistributedLock.Redis", "modules\common\LINGYUN.Abp.DistributedLock.Redis\LINGYUN.Abp.DistributedLock.Redis.csproj", "{71C57C19-671D-4CD4-AA46-E8021E53BBE5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.EventBus.CAP", "modules\common\LINGYUN.Abp.EventBus.CAP\LINGYUN.Abp.EventBus.CAP.csproj", "{7947D559-4288-486B-8FB3-D957CC7EDD32}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling", "modules\common\LINGYUN.Abp.ExceptionHandling\LINGYUN.Abp.ExceptionHandling.csproj", "{A4195E41-3919-4C3E-8768-7F277B583D16}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling.Emailing", "modules\common\LINGYUN.Abp.ExceptionHandling.Emailing\LINGYUN.Abp.ExceptionHandling.Emailing.csproj", "{60083380-062C-4914-9E4E-5AE6637CCC3F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling.Notifications", "modules\common\LINGYUN.Abp.ExceptionHandling.Notifications\LINGYUN.Abp.ExceptionHandling.Notifications.csproj", "{9C6E9EE2-5C83-4D96-A7B7-32798FEF2845}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation", "modules\common\LINGYUN.Abp.Features.LimitValidation\LINGYUN.Abp.Features.LimitValidation.csproj", "{34C1E979-65B9-46F5-B7BA-60F227EBA093}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation.Redis", "modules\common\LINGYUN.Abp.Features.LimitValidation.Redis\LINGYUN.Abp.Features.LimitValidation.Redis.csproj", "{80A56461-0ACC-4069-B571-87DCA064B2EF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Hangfire.Storage.MySql", "modules\common\LINGYUN.Abp.Hangfire.MySqlStorage\LINGYUN.Abp.Hangfire.Storage.MySql.csproj", "{568D2C50-1C31-4C31-89A2-C608FA93C6FD}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Hangfire.Storage.SqlServer", "modules\common\LINGYUN.Abp.Hangfire.Storage.SqlServer\LINGYUN.Abp.Hangfire.Storage.SqlServer.csproj", "{12451B83-18DE-4E93-B98C-509477D53D5E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location", "modules\common\LINGYUN.Abp.Location\LINGYUN.Abp.Location.csproj", "{AAD0B6A7-847A-4537-A300-50E37F4B70CC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location.Baidu", "modules\common\LINGYUN.Abp.Location.Baidu\LINGYUN.Abp.Location.Baidu.csproj", "{5B5C2372-2EAB-4559-BBCB-0C1C9A7158DB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location.Tencent", "modules\common\LINGYUN.Abp.Location.Tencent\LINGYUN.Abp.Location.Tencent.csproj", "{2A0C5EF1-CB21-4656-8C32-B5673F6B82D2}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications", "modules\common\LINGYUN.Abp.Notifications\LINGYUN.Abp.Notifications.csproj", "{3021DD8B-EA8F-4A88-BC2C-1BBEDC6255FE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.SignalR", "modules\common\LINGYUN.Abp.Notifications.SignalR\LINGYUN.Abp.Notifications.SignalR.csproj", "{B31CEE79-45F6-4BB9-9EEB-08843C324B37}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wechat", "wechat", "{22C61434-D29A-4376-AD56-F5089F3E617A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat", "modules\wechat\LINGYUN.Abp.WeChat\LINGYUN.Abp.WeChat.csproj", "{865D5508-63CD-4D44-9F5B-AE5CD4A43D08}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.WeChat.WeApp", "modules\wechat\LINGYUN.Abp.Notifications.WeChat\LINGYUN.Abp.Notifications.WeChat.WeApp.csproj", "{076B511E-39C5-4C91-BE8D-CA666CCCEA46}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Authorization", "modules\wechat\LINGYUN.Abp.WeChat.Authorization\LINGYUN.Abp.WeChat.Authorization.csproj", "{BCB7E04B-4A60-4596-8051-8ABC08444CAF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Settings", "modules\common\LINGYUN.Abp.Settings\LINGYUN.Abp.Settings.csproj", "{ECAA4B82-A240-4747-888C-FACD8634D389}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Sms.Aliyun", "modules\common\LINGYUN.Abp.Sms.Aliyun\LINGYUN.Abp.Sms.Aliyun.csproj", "{8AF8FD6B-634F-41FA-B421-A4ACFD159FE0}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "aliyun", "aliyun", "{7F18BCA5-35BD-41FB-8EFF-801B56E5E414}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "signalr", "signalr", "{E2E7A062-0ABB-41B4-8220-60228446D2C2}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "location", "location", "{EFFAF456-50C1-42C9-836E-E95E7A38D52C}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "realtime", "realtime", "{B91F26C5-B148-4094-B5F1-71E5F945DBED}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "features", "features", "{0D2D7A10-CBA5-4798-BFC7-EB05D1E6B94C}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.Client", "modules\features\LINGYUN.Abp.Features.Client\LINGYUN.Abp.Features.Client.csproj", "{3B455AA7-B165-4EA0-8870-DB8DA5C76FC5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FeatureManagement.Client", "modules\features\LINGYUN.Abp.FeatureManagement.Client\LINGYUN.Abp.FeatureManagement.Client.csproj", "{99F8F254-A76E-43BB-8048-CC17EE1C8527}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tenants", "tenants", "{38E21687-5F19-42C9-9D11-4B1D2EF64EDB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MultiTenancy", "modules\tenants\LINGYUN.Abp.MultiTenancy\LINGYUN.Abp.MultiTenancy.csproj", "{F2DAA5EB-5508-4D99-AE64-A10C025712BC}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MultiTenancy.DbFinder", "modules\tenants\LINGYUN.Abp.MultiTenancy.DbFinder\LINGYUN.Abp.MultiTenancy.DbFinder.csproj", "{BD0A1F2D-7667-45F8-872D-D41F36384163}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MultiTenancy.RemoteService", "modules\tenants\LINGYUN.Abp.MultiTenancy.RemoteService\LINGYUN.Abp.MultiTenancy.RemoteService.csproj", "{21C0A260-BC14-4A8F-9299-A9EE58682B96}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{5A87E9DD-3340-44DC-9564-4D8832A0228E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5A87E9DD-3340-44DC-9564-4D8832A0228E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5A87E9DD-3340-44DC-9564-4D8832A0228E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5A87E9DD-3340-44DC-9564-4D8832A0228E}.Release|Any CPU.Build.0 = Release|Any CPU
{E9BE3C65-2AB2-4CE8-8EB9-5C91B329ADB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E9BE3C65-2AB2-4CE8-8EB9-5C91B329ADB4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E9BE3C65-2AB2-4CE8-8EB9-5C91B329ADB4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E9BE3C65-2AB2-4CE8-8EB9-5C91B329ADB4}.Release|Any CPU.Build.0 = Release|Any CPU
{824CB367-383B-48B2-972D-33923438A9A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{824CB367-383B-48B2-972D-33923438A9A0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{824CB367-383B-48B2-972D-33923438A9A0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{824CB367-383B-48B2-972D-33923438A9A0}.Release|Any CPU.Build.0 = Release|Any CPU
{E9AEC9D6-1FE7-4B00-BAC5-2C3D4B63CCA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E9AEC9D6-1FE7-4B00-BAC5-2C3D4B63CCA2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E9AEC9D6-1FE7-4B00-BAC5-2C3D4B63CCA2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E9AEC9D6-1FE7-4B00-BAC5-2C3D4B63CCA2}.Release|Any CPU.Build.0 = Release|Any CPU
{304D06E6-41EC-4DCB-AEAE-DBEEC75F9ADC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{304D06E6-41EC-4DCB-AEAE-DBEEC75F9ADC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{304D06E6-41EC-4DCB-AEAE-DBEEC75F9ADC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{304D06E6-41EC-4DCB-AEAE-DBEEC75F9ADC}.Release|Any CPU.Build.0 = Release|Any CPU
{58777534-1AEF-4D1B-807C-1070D6CB1D48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{58777534-1AEF-4D1B-807C-1070D6CB1D48}.Debug|Any CPU.Build.0 = Debug|Any CPU
{58777534-1AEF-4D1B-807C-1070D6CB1D48}.Release|Any CPU.ActiveCfg = Release|Any CPU
{58777534-1AEF-4D1B-807C-1070D6CB1D48}.Release|Any CPU.Build.0 = Release|Any CPU
{FFC21AA5-8DCF-4514-95F0-9A1D428095F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FFC21AA5-8DCF-4514-95F0-9A1D428095F8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FFC21AA5-8DCF-4514-95F0-9A1D428095F8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FFC21AA5-8DCF-4514-95F0-9A1D428095F8}.Release|Any CPU.Build.0 = Release|Any CPU
{492710E6-EEF5-4390-A474-8FB2412ECBE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{492710E6-EEF5-4390-A474-8FB2412ECBE5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{492710E6-EEF5-4390-A474-8FB2412ECBE5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{492710E6-EEF5-4390-A474-8FB2412ECBE5}.Release|Any CPU.Build.0 = Release|Any CPU
{CCF1EB86-29BD-4531-BB27-C9111CC67570}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{CCF1EB86-29BD-4531-BB27-C9111CC67570}.Debug|Any CPU.Build.0 = Debug|Any CPU
{CCF1EB86-29BD-4531-BB27-C9111CC67570}.Release|Any CPU.ActiveCfg = Release|Any CPU
{CCF1EB86-29BD-4531-BB27-C9111CC67570}.Release|Any CPU.Build.0 = Release|Any CPU
{4BD715F2-D117-45FB-B26C-F92D912144C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4BD715F2-D117-45FB-B26C-F92D912144C7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4BD715F2-D117-45FB-B26C-F92D912144C7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4BD715F2-D117-45FB-B26C-F92D912144C7}.Release|Any CPU.Build.0 = Release|Any CPU
{71C57C19-671D-4CD4-AA46-E8021E53BBE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{71C57C19-671D-4CD4-AA46-E8021E53BBE5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{71C57C19-671D-4CD4-AA46-E8021E53BBE5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{71C57C19-671D-4CD4-AA46-E8021E53BBE5}.Release|Any CPU.Build.0 = Release|Any CPU
{7947D559-4288-486B-8FB3-D957CC7EDD32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7947D559-4288-486B-8FB3-D957CC7EDD32}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7947D559-4288-486B-8FB3-D957CC7EDD32}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7947D559-4288-486B-8FB3-D957CC7EDD32}.Release|Any CPU.Build.0 = Release|Any CPU
{A4195E41-3919-4C3E-8768-7F277B583D16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A4195E41-3919-4C3E-8768-7F277B583D16}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A4195E41-3919-4C3E-8768-7F277B583D16}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A4195E41-3919-4C3E-8768-7F277B583D16}.Release|Any CPU.Build.0 = Release|Any CPU
{60083380-062C-4914-9E4E-5AE6637CCC3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{60083380-062C-4914-9E4E-5AE6637CCC3F}.Debug|Any CPU.Build.0 = Debug|Any CPU
{60083380-062C-4914-9E4E-5AE6637CCC3F}.Release|Any CPU.ActiveCfg = Release|Any CPU
{60083380-062C-4914-9E4E-5AE6637CCC3F}.Release|Any CPU.Build.0 = Release|Any CPU
{9C6E9EE2-5C83-4D96-A7B7-32798FEF2845}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9C6E9EE2-5C83-4D96-A7B7-32798FEF2845}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9C6E9EE2-5C83-4D96-A7B7-32798FEF2845}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9C6E9EE2-5C83-4D96-A7B7-32798FEF2845}.Release|Any CPU.Build.0 = Release|Any CPU
{34C1E979-65B9-46F5-B7BA-60F227EBA093}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{34C1E979-65B9-46F5-B7BA-60F227EBA093}.Debug|Any CPU.Build.0 = Debug|Any CPU
{34C1E979-65B9-46F5-B7BA-60F227EBA093}.Release|Any CPU.ActiveCfg = Release|Any CPU
{34C1E979-65B9-46F5-B7BA-60F227EBA093}.Release|Any CPU.Build.0 = Release|Any CPU
{80A56461-0ACC-4069-B571-87DCA064B2EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{80A56461-0ACC-4069-B571-87DCA064B2EF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{80A56461-0ACC-4069-B571-87DCA064B2EF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{80A56461-0ACC-4069-B571-87DCA064B2EF}.Release|Any CPU.Build.0 = Release|Any CPU
{568D2C50-1C31-4C31-89A2-C608FA93C6FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{568D2C50-1C31-4C31-89A2-C608FA93C6FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{568D2C50-1C31-4C31-89A2-C608FA93C6FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{568D2C50-1C31-4C31-89A2-C608FA93C6FD}.Release|Any CPU.Build.0 = Release|Any CPU
{12451B83-18DE-4E93-B98C-509477D53D5E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{12451B83-18DE-4E93-B98C-509477D53D5E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{12451B83-18DE-4E93-B98C-509477D53D5E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{12451B83-18DE-4E93-B98C-509477D53D5E}.Release|Any CPU.Build.0 = Release|Any CPU
{AAD0B6A7-847A-4537-A300-50E37F4B70CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{AAD0B6A7-847A-4537-A300-50E37F4B70CC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{AAD0B6A7-847A-4537-A300-50E37F4B70CC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{AAD0B6A7-847A-4537-A300-50E37F4B70CC}.Release|Any CPU.Build.0 = Release|Any CPU
{5B5C2372-2EAB-4559-BBCB-0C1C9A7158DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5B5C2372-2EAB-4559-BBCB-0C1C9A7158DB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5B5C2372-2EAB-4559-BBCB-0C1C9A7158DB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5B5C2372-2EAB-4559-BBCB-0C1C9A7158DB}.Release|Any CPU.Build.0 = Release|Any CPU
{2A0C5EF1-CB21-4656-8C32-B5673F6B82D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2A0C5EF1-CB21-4656-8C32-B5673F6B82D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2A0C5EF1-CB21-4656-8C32-B5673F6B82D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2A0C5EF1-CB21-4656-8C32-B5673F6B82D2}.Release|Any CPU.Build.0 = Release|Any CPU
{3021DD8B-EA8F-4A88-BC2C-1BBEDC6255FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3021DD8B-EA8F-4A88-BC2C-1BBEDC6255FE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3021DD8B-EA8F-4A88-BC2C-1BBEDC6255FE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3021DD8B-EA8F-4A88-BC2C-1BBEDC6255FE}.Release|Any CPU.Build.0 = Release|Any CPU
{B31CEE79-45F6-4BB9-9EEB-08843C324B37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B31CEE79-45F6-4BB9-9EEB-08843C324B37}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B31CEE79-45F6-4BB9-9EEB-08843C324B37}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B31CEE79-45F6-4BB9-9EEB-08843C324B37}.Release|Any CPU.Build.0 = Release|Any CPU
{865D5508-63CD-4D44-9F5B-AE5CD4A43D08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{865D5508-63CD-4D44-9F5B-AE5CD4A43D08}.Debug|Any CPU.Build.0 = Debug|Any CPU
{865D5508-63CD-4D44-9F5B-AE5CD4A43D08}.Release|Any CPU.ActiveCfg = Release|Any CPU
{865D5508-63CD-4D44-9F5B-AE5CD4A43D08}.Release|Any CPU.Build.0 = Release|Any CPU
{076B511E-39C5-4C91-BE8D-CA666CCCEA46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{076B511E-39C5-4C91-BE8D-CA666CCCEA46}.Debug|Any CPU.Build.0 = Debug|Any CPU
{076B511E-39C5-4C91-BE8D-CA666CCCEA46}.Release|Any CPU.ActiveCfg = Release|Any CPU
{076B511E-39C5-4C91-BE8D-CA666CCCEA46}.Release|Any CPU.Build.0 = Release|Any CPU
{BCB7E04B-4A60-4596-8051-8ABC08444CAF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BCB7E04B-4A60-4596-8051-8ABC08444CAF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BCB7E04B-4A60-4596-8051-8ABC08444CAF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BCB7E04B-4A60-4596-8051-8ABC08444CAF}.Release|Any CPU.Build.0 = Release|Any CPU
{ECAA4B82-A240-4747-888C-FACD8634D389}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ECAA4B82-A240-4747-888C-FACD8634D389}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ECAA4B82-A240-4747-888C-FACD8634D389}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ECAA4B82-A240-4747-888C-FACD8634D389}.Release|Any CPU.Build.0 = Release|Any CPU
{8AF8FD6B-634F-41FA-B421-A4ACFD159FE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8AF8FD6B-634F-41FA-B421-A4ACFD159FE0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8AF8FD6B-634F-41FA-B421-A4ACFD159FE0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8AF8FD6B-634F-41FA-B421-A4ACFD159FE0}.Release|Any CPU.Build.0 = Release|Any CPU
{3B455AA7-B165-4EA0-8870-DB8DA5C76FC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3B455AA7-B165-4EA0-8870-DB8DA5C76FC5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3B455AA7-B165-4EA0-8870-DB8DA5C76FC5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3B455AA7-B165-4EA0-8870-DB8DA5C76FC5}.Release|Any CPU.Build.0 = Release|Any CPU
{99F8F254-A76E-43BB-8048-CC17EE1C8527}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{99F8F254-A76E-43BB-8048-CC17EE1C8527}.Debug|Any CPU.Build.0 = Debug|Any CPU
{99F8F254-A76E-43BB-8048-CC17EE1C8527}.Release|Any CPU.ActiveCfg = Release|Any CPU
{99F8F254-A76E-43BB-8048-CC17EE1C8527}.Release|Any CPU.Build.0 = Release|Any CPU
{F2DAA5EB-5508-4D99-AE64-A10C025712BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F2DAA5EB-5508-4D99-AE64-A10C025712BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F2DAA5EB-5508-4D99-AE64-A10C025712BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F2DAA5EB-5508-4D99-AE64-A10C025712BC}.Release|Any CPU.Build.0 = Release|Any CPU
{BD0A1F2D-7667-45F8-872D-D41F36384163}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BD0A1F2D-7667-45F8-872D-D41F36384163}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BD0A1F2D-7667-45F8-872D-D41F36384163}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BD0A1F2D-7667-45F8-872D-D41F36384163}.Release|Any CPU.Build.0 = Release|Any CPU
{21C0A260-BC14-4A8F-9299-A9EE58682B96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{21C0A260-BC14-4A8F-9299-A9EE58682B96}.Debug|Any CPU.Build.0 = Debug|Any CPU
{21C0A260-BC14-4A8F-9299-A9EE58682B96}.Release|Any CPU.ActiveCfg = Release|Any CPU
{21C0A260-BC14-4A8F-9299-A9EE58682B96}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{086BE5BE-8594-4DA7-8819-935FEF76DABD} = {02EA4E78-5891-43BC-944F-3E52FEE032E4}
{5A87E9DD-3340-44DC-9564-4D8832A0228E} = {B91F26C5-B148-4094-B5F1-71E5F945DBED}
{E9BE3C65-2AB2-4CE8-8EB9-5C91B329ADB4} = {B91F26C5-B148-4094-B5F1-71E5F945DBED}
{824CB367-383B-48B2-972D-33923438A9A0} = {B91F26C5-B148-4094-B5F1-71E5F945DBED}
{E9AEC9D6-1FE7-4B00-BAC5-2C3D4B63CCA2} = {E2E7A062-0ABB-41B4-8220-60228446D2C2}
{304D06E6-41EC-4DCB-AEAE-DBEEC75F9ADC} = {E2E7A062-0ABB-41B4-8220-60228446D2C2}
{58777534-1AEF-4D1B-807C-1070D6CB1D48} = {7F18BCA5-35BD-41FB-8EFF-801B56E5E414}
{FFC21AA5-8DCF-4514-95F0-9A1D428095F8} = {086BE5BE-8594-4DA7-8819-935FEF76DABD}
{492710E6-EEF5-4390-A474-8FB2412ECBE5} = {086BE5BE-8594-4DA7-8819-935FEF76DABD}
{CCF1EB86-29BD-4531-BB27-C9111CC67570} = {7F18BCA5-35BD-41FB-8EFF-801B56E5E414}
{4BD715F2-D117-45FB-B26C-F92D912144C7} = {086BE5BE-8594-4DA7-8819-935FEF76DABD}
{71C57C19-671D-4CD4-AA46-E8021E53BBE5} = {086BE5BE-8594-4DA7-8819-935FEF76DABD}
{7947D559-4288-486B-8FB3-D957CC7EDD32} = {086BE5BE-8594-4DA7-8819-935FEF76DABD}
{A4195E41-3919-4C3E-8768-7F277B583D16} = {086BE5BE-8594-4DA7-8819-935FEF76DABD}
{60083380-062C-4914-9E4E-5AE6637CCC3F} = {086BE5BE-8594-4DA7-8819-935FEF76DABD}
{9C6E9EE2-5C83-4D96-A7B7-32798FEF2845} = {086BE5BE-8594-4DA7-8819-935FEF76DABD}
{34C1E979-65B9-46F5-B7BA-60F227EBA093} = {0D2D7A10-CBA5-4798-BFC7-EB05D1E6B94C}
{80A56461-0ACC-4069-B571-87DCA064B2EF} = {0D2D7A10-CBA5-4798-BFC7-EB05D1E6B94C}
{568D2C50-1C31-4C31-89A2-C608FA93C6FD} = {086BE5BE-8594-4DA7-8819-935FEF76DABD}
{12451B83-18DE-4E93-B98C-509477D53D5E} = {086BE5BE-8594-4DA7-8819-935FEF76DABD}
{AAD0B6A7-847A-4537-A300-50E37F4B70CC} = {EFFAF456-50C1-42C9-836E-E95E7A38D52C}
{5B5C2372-2EAB-4559-BBCB-0C1C9A7158DB} = {EFFAF456-50C1-42C9-836E-E95E7A38D52C}
{2A0C5EF1-CB21-4656-8C32-B5673F6B82D2} = {EFFAF456-50C1-42C9-836E-E95E7A38D52C}
{3021DD8B-EA8F-4A88-BC2C-1BBEDC6255FE} = {B91F26C5-B148-4094-B5F1-71E5F945DBED}
{B31CEE79-45F6-4BB9-9EEB-08843C324B37} = {B91F26C5-B148-4094-B5F1-71E5F945DBED}
{22C61434-D29A-4376-AD56-F5089F3E617A} = {02EA4E78-5891-43BC-944F-3E52FEE032E4}
{865D5508-63CD-4D44-9F5B-AE5CD4A43D08} = {22C61434-D29A-4376-AD56-F5089F3E617A}
{076B511E-39C5-4C91-BE8D-CA666CCCEA46} = {22C61434-D29A-4376-AD56-F5089F3E617A}
{BCB7E04B-4A60-4596-8051-8ABC08444CAF} = {22C61434-D29A-4376-AD56-F5089F3E617A}
{ECAA4B82-A240-4747-888C-FACD8634D389} = {086BE5BE-8594-4DA7-8819-935FEF76DABD}
{8AF8FD6B-634F-41FA-B421-A4ACFD159FE0} = {7F18BCA5-35BD-41FB-8EFF-801B56E5E414}
{7F18BCA5-35BD-41FB-8EFF-801B56E5E414} = {02EA4E78-5891-43BC-944F-3E52FEE032E4}
{E2E7A062-0ABB-41B4-8220-60228446D2C2} = {02EA4E78-5891-43BC-944F-3E52FEE032E4}
{EFFAF456-50C1-42C9-836E-E95E7A38D52C} = {02EA4E78-5891-43BC-944F-3E52FEE032E4}
{B91F26C5-B148-4094-B5F1-71E5F945DBED} = {02EA4E78-5891-43BC-944F-3E52FEE032E4}
{0D2D7A10-CBA5-4798-BFC7-EB05D1E6B94C} = {02EA4E78-5891-43BC-944F-3E52FEE032E4}
{3B455AA7-B165-4EA0-8870-DB8DA5C76FC5} = {0D2D7A10-CBA5-4798-BFC7-EB05D1E6B94C}
{99F8F254-A76E-43BB-8048-CC17EE1C8527} = {0D2D7A10-CBA5-4798-BFC7-EB05D1E6B94C}
{38E21687-5F19-42C9-9D11-4B1D2EF64EDB} = {02EA4E78-5891-43BC-944F-3E52FEE032E4}
{F2DAA5EB-5508-4D99-AE64-A10C025712BC} = {38E21687-5F19-42C9-9D11-4B1D2EF64EDB}
{BD0A1F2D-7667-45F8-872D-D41F36384163} = {38E21687-5F19-42C9-9D11-4B1D2EF64EDB}
{21C0A260-BC14-4A8F-9299-A9EE58682B96} = {38E21687-5F19-42C9-9D11-4B1D2EF64EDB}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {06C707C6-02C0-411A-AD3B-2D0E13787CB8}
EndGlobalSection
EndGlobal

69
aspnet-core/LINGYUN.MicroService.IdentityServer.sln

@ -0,0 +1,69 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30011.22
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "modules", "modules", "{7C727110-59CA-495B-8143-C5DDEDE41289}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "services", "services", "{DDCA574F-911B-4547-BA21-12CCE1022D95}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AuthServer.Host", "services\account\AuthServer.Host\AuthServer.Host.csproj", "{BF8073FF-6403-4ED6-A3CD-74F240DC8044}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identity-server", "identity-server", "{98887A8F-7040-4FA1-842F-A4C77A61ED09}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.SmsValidator", "modules\identityServer\LINGYUN.Abp.IdentityServer.SmsValidator\LINGYUN.Abp.IdentityServer.SmsValidator.csproj", "{9EA06629-DBAC-4369-9850-B7415D0470B0}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.WeChatValidator", "modules\identityServer\LINGYUN.Abp.IdentityServer.WeChatValidator\LINGYUN.Abp.IdentityServer.WeChatValidator.csproj", "{B9E9D754-0BC1-42EA-94B3-631D1EA82B48}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identity", "identity", "{70B8D735-1E89-4163-8EDB-56A74E374CF4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Domain.Identity", "modules\identity\LINGYUN.Abp.PermissionManagement.Domain.Identity\LINGYUN.Abp.PermissionManagement.Domain.Identity.csproj", "{F87B2BA3-40BC-4CB8-B53E-793C860F285D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wechat", "wechat", "{AF8AECC8-0F42-4FC5-B3C0-00987BA8279F}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Authorization", "modules\wechat\LINGYUN.Abp.WeChat.Authorization\LINGYUN.Abp.WeChat.Authorization.csproj", "{F656C1B2-6122-44C1-97F4-421CB4C03ED8}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{BF8073FF-6403-4ED6-A3CD-74F240DC8044}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BF8073FF-6403-4ED6-A3CD-74F240DC8044}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BF8073FF-6403-4ED6-A3CD-74F240DC8044}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BF8073FF-6403-4ED6-A3CD-74F240DC8044}.Release|Any CPU.Build.0 = Release|Any CPU
{9EA06629-DBAC-4369-9850-B7415D0470B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9EA06629-DBAC-4369-9850-B7415D0470B0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9EA06629-DBAC-4369-9850-B7415D0470B0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9EA06629-DBAC-4369-9850-B7415D0470B0}.Release|Any CPU.Build.0 = Release|Any CPU
{B9E9D754-0BC1-42EA-94B3-631D1EA82B48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B9E9D754-0BC1-42EA-94B3-631D1EA82B48}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B9E9D754-0BC1-42EA-94B3-631D1EA82B48}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B9E9D754-0BC1-42EA-94B3-631D1EA82B48}.Release|Any CPU.Build.0 = Release|Any CPU
{F87B2BA3-40BC-4CB8-B53E-793C860F285D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F87B2BA3-40BC-4CB8-B53E-793C860F285D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F87B2BA3-40BC-4CB8-B53E-793C860F285D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F87B2BA3-40BC-4CB8-B53E-793C860F285D}.Release|Any CPU.Build.0 = Release|Any CPU
{F656C1B2-6122-44C1-97F4-421CB4C03ED8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F656C1B2-6122-44C1-97F4-421CB4C03ED8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F656C1B2-6122-44C1-97F4-421CB4C03ED8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F656C1B2-6122-44C1-97F4-421CB4C03ED8}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{BF8073FF-6403-4ED6-A3CD-74F240DC8044} = {DDCA574F-911B-4547-BA21-12CCE1022D95}
{98887A8F-7040-4FA1-842F-A4C77A61ED09} = {7C727110-59CA-495B-8143-C5DDEDE41289}
{9EA06629-DBAC-4369-9850-B7415D0470B0} = {98887A8F-7040-4FA1-842F-A4C77A61ED09}
{B9E9D754-0BC1-42EA-94B3-631D1EA82B48} = {98887A8F-7040-4FA1-842F-A4C77A61ED09}
{70B8D735-1E89-4163-8EDB-56A74E374CF4} = {7C727110-59CA-495B-8143-C5DDEDE41289}
{F87B2BA3-40BC-4CB8-B53E-793C860F285D} = {70B8D735-1E89-4163-8EDB-56A74E374CF4}
{AF8AECC8-0F42-4FC5-B3C0-00987BA8279F} = {7C727110-59CA-495B-8143-C5DDEDE41289}
{F656C1B2-6122-44C1-97F4-421CB4C03ED8} = {AF8AECC8-0F42-4FC5-B3C0-00987BA8279F}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {FCB77471-9ECB-4666-A316-1D6A6285A468}
EndGlobalSection
EndGlobal

177
aspnet-core/LINGYUN.MicroService.IdentityServerAdmin.sln

@ -0,0 +1,177 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30011.22
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "modules", "modules", "{14B8F528-C649-4FAD-9BBB-6C979ED403E1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.Domain", "modules\identityServer\LINGYUN.Abp.IdentityServer.Domain\LINGYUN.Abp.IdentityServer.Domain.csproj", "{DC379D12-77E1-4600-8E99-AAD9B92C3A1B}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.Application.Contracts", "modules\identityServer\LINGYUN.Abp.IdentityServer.Application.Contracts\LINGYUN.Abp.IdentityServer.Application.Contracts.csproj", "{3265F0C5-2D16-4CA8-A980-1B4B3CB928BB}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.Application", "modules\identityServer\LINGYUN.Abp.IdentityServer.Application\LINGYUN.Abp.IdentityServer.Application.csproj", "{DBC8DC97-06DD-4496-9D2A-F28FDD379AE4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.EntityFrameworkCore", "modules\identityServer\LINGYUN.Abp.IdentityServer.EntityFrameworkCore\LINGYUN.Abp.IdentityServer.EntityFrameworkCore.csproj", "{DA57672C-501D-4CAF-8BF2-4D93B2D460BF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.HttpApi", "modules\identityServer\LINGYUN.Abp.IdentityServer.HttpApi\LINGYUN.Abp.IdentityServer.HttpApi.csproj", "{9C505703-C073-4E7F-9BB5-9DE0631C95AB}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "services", "services", "{0CA2F891-7E8E-453B-9FEF-ADCBEB7795DD}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer4.HttpApi.Host", "services\identity-server\LINGYUN.Abp.IdentityServer4.HttpApi.Host\LINGYUN.Abp.IdentityServer4.HttpApi.Host.csproj", "{DE9E58E2-268C-4DF0-85AA-FF7F328B62F0}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "account", "account", "{4F06C65B-22CC-466E-B3FD-3F695DD38191}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identity-server", "identity-server", "{7AB942D5-D139-4F9F-9342-71534AA3A5AC}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identity", "identity", "{BD964040-90B2-4179-A5EB-5830F5C7E073}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.Domain.Shared", "modules\account\LINGYUN.Abp.Account.Domain.Shared\LINGYUN.Abp.Account.Domain.Shared.csproj", "{82ACBDDA-1C77-49B6-9F33-38DFD3D4691D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.Domain", "modules\account\LINGYUN.Abp.Account.Domain\LINGYUN.Abp.Account.Domain.csproj", "{2BA25A1B-D53E-432B-BAC2-BAAC66CA390D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.Application.Contracts", "modules\account\LINGYUN.Abp.Account.Application.Contracts\LINGYUN.Abp.Account.Application.Contracts.csproj", "{A4DFDE21-1931-46B5-8381-36B6EB6E51E1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.Application", "modules\account\LINGYUN.Abp.Account.Application\LINGYUN.Abp.Account.Application.csproj", "{6EE4D85F-6035-4AB5-B650-9E3D3A2AA8D2}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.HttpApi", "modules\account\LINGYUN.Abp.Account.HttpApi\LINGYUN.Abp.Account.HttpApi.csproj", "{BB1124C0-79F4-4E72-8854-945B3F0AD76D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.Web", "modules\account\LINGYUN.Abp.Account.Web\LINGYUN.Abp.Account.Web.csproj", "{3297ED1B-FB82-4EC5-ADA1-0D0390BEDBB8}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Domain", "modules\identity\LINGYUN.Abp.Identity.Domain\LINGYUN.Abp.Identity.Domain.csproj", "{E22445B9-7039-4DA1-B547-BAB437D6D2B3}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Application.Contracts", "modules\identity\LINGYUN.Abp.Identity.Application.Contracts\LINGYUN.Abp.Identity.Application.Contracts.csproj", "{116D9D69-ED2C-4F23-9445-3981D8EA0EB7}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Application", "modules\identity\LINGYUN.Abp.Identity.Application\LINGYUN.Abp.Identity.Application.csproj", "{B07A1763-1B37-4416-8F0C-B938C175A56D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.HttpApi", "modules\identity\LINGYUN.Abp.Identity.HttpApi\LINGYUN.Abp.Identity.HttpApi.csproj", "{0F87C16B-8E91-4B25-B501-AD81F8EC599E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.EntityFrameworkCore", "modules\identity\LINGYUN.Abp.Identity.EntityFrameworkCore\LINGYUN.Abp.Identity.EntityFrameworkCore.csproj", "{BF059F48-C8C0-4E17-AC4F-A1D1ADE405C7}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.HttpApi.Client", "modules\identity\LINGYUN.Abp.Identity.HttpApi.Client\LINGYUN.Abp.Identity.HttpApi.Client.csproj", "{6679A09F-124A-470A-81F5-A94302CEFEE4}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Domain.Identity", "modules\identity\LINGYUN.Abp.PermissionManagement.Domain.Identity\LINGYUN.Abp.PermissionManagement.Domain.Identity.csproj", "{177B6CD3-1690-416D-9B37-A821093DEFBD}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wechat", "wechat", "{7EE9651C-17B0-4343-A2ED-92439F8C9019}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Authorization", "modules\wechat\LINGYUN.Abp.WeChat.Authorization\LINGYUN.Abp.WeChat.Authorization.csproj", "{F61FA8AA-4248-4F2B-87E0-73CD2C027783}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{DC379D12-77E1-4600-8E99-AAD9B92C3A1B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DC379D12-77E1-4600-8E99-AAD9B92C3A1B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DC379D12-77E1-4600-8E99-AAD9B92C3A1B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DC379D12-77E1-4600-8E99-AAD9B92C3A1B}.Release|Any CPU.Build.0 = Release|Any CPU
{3265F0C5-2D16-4CA8-A980-1B4B3CB928BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3265F0C5-2D16-4CA8-A980-1B4B3CB928BB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3265F0C5-2D16-4CA8-A980-1B4B3CB928BB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3265F0C5-2D16-4CA8-A980-1B4B3CB928BB}.Release|Any CPU.Build.0 = Release|Any CPU
{DBC8DC97-06DD-4496-9D2A-F28FDD379AE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DBC8DC97-06DD-4496-9D2A-F28FDD379AE4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DBC8DC97-06DD-4496-9D2A-F28FDD379AE4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DBC8DC97-06DD-4496-9D2A-F28FDD379AE4}.Release|Any CPU.Build.0 = Release|Any CPU
{DA57672C-501D-4CAF-8BF2-4D93B2D460BF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DA57672C-501D-4CAF-8BF2-4D93B2D460BF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DA57672C-501D-4CAF-8BF2-4D93B2D460BF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DA57672C-501D-4CAF-8BF2-4D93B2D460BF}.Release|Any CPU.Build.0 = Release|Any CPU
{9C505703-C073-4E7F-9BB5-9DE0631C95AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{9C505703-C073-4E7F-9BB5-9DE0631C95AB}.Debug|Any CPU.Build.0 = Debug|Any CPU
{9C505703-C073-4E7F-9BB5-9DE0631C95AB}.Release|Any CPU.ActiveCfg = Release|Any CPU
{9C505703-C073-4E7F-9BB5-9DE0631C95AB}.Release|Any CPU.Build.0 = Release|Any CPU
{DE9E58E2-268C-4DF0-85AA-FF7F328B62F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DE9E58E2-268C-4DF0-85AA-FF7F328B62F0}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DE9E58E2-268C-4DF0-85AA-FF7F328B62F0}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DE9E58E2-268C-4DF0-85AA-FF7F328B62F0}.Release|Any CPU.Build.0 = Release|Any CPU
{82ACBDDA-1C77-49B6-9F33-38DFD3D4691D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{82ACBDDA-1C77-49B6-9F33-38DFD3D4691D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{82ACBDDA-1C77-49B6-9F33-38DFD3D4691D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{82ACBDDA-1C77-49B6-9F33-38DFD3D4691D}.Release|Any CPU.Build.0 = Release|Any CPU
{2BA25A1B-D53E-432B-BAC2-BAAC66CA390D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2BA25A1B-D53E-432B-BAC2-BAAC66CA390D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2BA25A1B-D53E-432B-BAC2-BAAC66CA390D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2BA25A1B-D53E-432B-BAC2-BAAC66CA390D}.Release|Any CPU.Build.0 = Release|Any CPU
{A4DFDE21-1931-46B5-8381-36B6EB6E51E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A4DFDE21-1931-46B5-8381-36B6EB6E51E1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A4DFDE21-1931-46B5-8381-36B6EB6E51E1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A4DFDE21-1931-46B5-8381-36B6EB6E51E1}.Release|Any CPU.Build.0 = Release|Any CPU
{6EE4D85F-6035-4AB5-B650-9E3D3A2AA8D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6EE4D85F-6035-4AB5-B650-9E3D3A2AA8D2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6EE4D85F-6035-4AB5-B650-9E3D3A2AA8D2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6EE4D85F-6035-4AB5-B650-9E3D3A2AA8D2}.Release|Any CPU.Build.0 = Release|Any CPU
{BB1124C0-79F4-4E72-8854-945B3F0AD76D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BB1124C0-79F4-4E72-8854-945B3F0AD76D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BB1124C0-79F4-4E72-8854-945B3F0AD76D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BB1124C0-79F4-4E72-8854-945B3F0AD76D}.Release|Any CPU.Build.0 = Release|Any CPU
{3297ED1B-FB82-4EC5-ADA1-0D0390BEDBB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3297ED1B-FB82-4EC5-ADA1-0D0390BEDBB8}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3297ED1B-FB82-4EC5-ADA1-0D0390BEDBB8}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3297ED1B-FB82-4EC5-ADA1-0D0390BEDBB8}.Release|Any CPU.Build.0 = Release|Any CPU
{E22445B9-7039-4DA1-B547-BAB437D6D2B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E22445B9-7039-4DA1-B547-BAB437D6D2B3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E22445B9-7039-4DA1-B547-BAB437D6D2B3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E22445B9-7039-4DA1-B547-BAB437D6D2B3}.Release|Any CPU.Build.0 = Release|Any CPU
{116D9D69-ED2C-4F23-9445-3981D8EA0EB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{116D9D69-ED2C-4F23-9445-3981D8EA0EB7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{116D9D69-ED2C-4F23-9445-3981D8EA0EB7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{116D9D69-ED2C-4F23-9445-3981D8EA0EB7}.Release|Any CPU.Build.0 = Release|Any CPU
{B07A1763-1B37-4416-8F0C-B938C175A56D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{B07A1763-1B37-4416-8F0C-B938C175A56D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{B07A1763-1B37-4416-8F0C-B938C175A56D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{B07A1763-1B37-4416-8F0C-B938C175A56D}.Release|Any CPU.Build.0 = Release|Any CPU
{0F87C16B-8E91-4B25-B501-AD81F8EC599E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0F87C16B-8E91-4B25-B501-AD81F8EC599E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{0F87C16B-8E91-4B25-B501-AD81F8EC599E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{0F87C16B-8E91-4B25-B501-AD81F8EC599E}.Release|Any CPU.Build.0 = Release|Any CPU
{BF059F48-C8C0-4E17-AC4F-A1D1ADE405C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BF059F48-C8C0-4E17-AC4F-A1D1ADE405C7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BF059F48-C8C0-4E17-AC4F-A1D1ADE405C7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BF059F48-C8C0-4E17-AC4F-A1D1ADE405C7}.Release|Any CPU.Build.0 = Release|Any CPU
{6679A09F-124A-470A-81F5-A94302CEFEE4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6679A09F-124A-470A-81F5-A94302CEFEE4}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6679A09F-124A-470A-81F5-A94302CEFEE4}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6679A09F-124A-470A-81F5-A94302CEFEE4}.Release|Any CPU.Build.0 = Release|Any CPU
{177B6CD3-1690-416D-9B37-A821093DEFBD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{177B6CD3-1690-416D-9B37-A821093DEFBD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{177B6CD3-1690-416D-9B37-A821093DEFBD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{177B6CD3-1690-416D-9B37-A821093DEFBD}.Release|Any CPU.Build.0 = Release|Any CPU
{F61FA8AA-4248-4F2B-87E0-73CD2C027783}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{F61FA8AA-4248-4F2B-87E0-73CD2C027783}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F61FA8AA-4248-4F2B-87E0-73CD2C027783}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F61FA8AA-4248-4F2B-87E0-73CD2C027783}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{DC379D12-77E1-4600-8E99-AAD9B92C3A1B} = {7AB942D5-D139-4F9F-9342-71534AA3A5AC}
{3265F0C5-2D16-4CA8-A980-1B4B3CB928BB} = {7AB942D5-D139-4F9F-9342-71534AA3A5AC}
{DBC8DC97-06DD-4496-9D2A-F28FDD379AE4} = {7AB942D5-D139-4F9F-9342-71534AA3A5AC}
{DA57672C-501D-4CAF-8BF2-4D93B2D460BF} = {7AB942D5-D139-4F9F-9342-71534AA3A5AC}
{9C505703-C073-4E7F-9BB5-9DE0631C95AB} = {7AB942D5-D139-4F9F-9342-71534AA3A5AC}
{DE9E58E2-268C-4DF0-85AA-FF7F328B62F0} = {0CA2F891-7E8E-453B-9FEF-ADCBEB7795DD}
{4F06C65B-22CC-466E-B3FD-3F695DD38191} = {14B8F528-C649-4FAD-9BBB-6C979ED403E1}
{7AB942D5-D139-4F9F-9342-71534AA3A5AC} = {14B8F528-C649-4FAD-9BBB-6C979ED403E1}
{BD964040-90B2-4179-A5EB-5830F5C7E073} = {14B8F528-C649-4FAD-9BBB-6C979ED403E1}
{82ACBDDA-1C77-49B6-9F33-38DFD3D4691D} = {4F06C65B-22CC-466E-B3FD-3F695DD38191}
{2BA25A1B-D53E-432B-BAC2-BAAC66CA390D} = {4F06C65B-22CC-466E-B3FD-3F695DD38191}
{A4DFDE21-1931-46B5-8381-36B6EB6E51E1} = {4F06C65B-22CC-466E-B3FD-3F695DD38191}
{6EE4D85F-6035-4AB5-B650-9E3D3A2AA8D2} = {4F06C65B-22CC-466E-B3FD-3F695DD38191}
{BB1124C0-79F4-4E72-8854-945B3F0AD76D} = {4F06C65B-22CC-466E-B3FD-3F695DD38191}
{3297ED1B-FB82-4EC5-ADA1-0D0390BEDBB8} = {4F06C65B-22CC-466E-B3FD-3F695DD38191}
{E22445B9-7039-4DA1-B547-BAB437D6D2B3} = {BD964040-90B2-4179-A5EB-5830F5C7E073}
{116D9D69-ED2C-4F23-9445-3981D8EA0EB7} = {BD964040-90B2-4179-A5EB-5830F5C7E073}
{B07A1763-1B37-4416-8F0C-B938C175A56D} = {BD964040-90B2-4179-A5EB-5830F5C7E073}
{0F87C16B-8E91-4B25-B501-AD81F8EC599E} = {BD964040-90B2-4179-A5EB-5830F5C7E073}
{BF059F48-C8C0-4E17-AC4F-A1D1ADE405C7} = {BD964040-90B2-4179-A5EB-5830F5C7E073}
{6679A09F-124A-470A-81F5-A94302CEFEE4} = {BD964040-90B2-4179-A5EB-5830F5C7E073}
{177B6CD3-1690-416D-9B37-A821093DEFBD} = {BD964040-90B2-4179-A5EB-5830F5C7E073}
{7EE9651C-17B0-4343-A2ED-92439F8C9019} = {14B8F528-C649-4FAD-9BBB-6C979ED403E1}
{F61FA8AA-4248-4F2B-87E0-73CD2C027783} = {7EE9651C-17B0-4343-A2ED-92439F8C9019}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {785FFF4D-BC59-499E-88A3-7CB7A7667228}
EndGlobalSection
EndGlobal

174
aspnet-core/LINGYUN.MicroService.Messages.sln

@ -0,0 +1,174 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30011.22
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "modules", "modules", "{0C7AA298-2957-4D71-A8F1-1C3C7932A1B3}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "services", "services", "{E7A821D8-85B5-4098-897D-5A814BD8131D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "common", "common", "{C00828FB-E7D5-4086-BA50-02022594AB73}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RealTime", "modules\common\LINGYUN.Abp.RealTime\LINGYUN.Abp.RealTime.csproj", "{07BCD006-F2F2-4685-8887-E8BEB18745FD}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RealTime.SignalR", "modules\common\LINGYUN.Abp.RealTime.SignalR\LINGYUN.Abp.RealTime.SignalR.csproj", "{60E37E86-ACA6-4464-9592-B0D8EFB629BD}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.SignalR.JwtToken", "modules\common\LINGYUN.Abp.AspNetCore.SignalR\LINGYUN.Abp.AspNetCore.SignalR.JwtToken.csproj", "{85B39FCE-6778-497C-A12E-6777C7FE651A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.SignalR.Protocol.Json", "modules\common\LINGYUN.Abp.AspNetCore.SignalR.Protocol.Json\LINGYUN.Abp.AspNetCore.SignalR.Protocol.Json.csproj", "{8C973655-DF59-40D8-B206-82344575A8CF}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IM", "modules\common\LINGYUN.Abp.IM\LINGYUN.Abp.IM.csproj", "{55B9F554-1754-4EF9-B325-B33421D4F6A9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IM.SignalR", "modules\common\LINGYUN.Abp.IM.SignalR\LINGYUN.Abp.IM.SignalR.csproj", "{7AC8C076-87E2-48ED-8AB3-C1F737F55DD1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications", "modules\common\LINGYUN.Abp.Notifications\LINGYUN.Abp.Notifications.csproj", "{C6F494D3-2C41-46DF-BCAD-F74D3E53CDE1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.SignalR", "modules\common\LINGYUN.Abp.Notifications.SignalR\LINGYUN.Abp.Notifications.SignalR.csproj", "{3531699A-9FF9-4F8C-BEAD-9D114FE8E519}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.Domain.Shared", "modules\message\LINGYUN.Abp.MessageService.Domain.Shared\LINGYUN.Abp.MessageService.Domain.Shared.csproj", "{50DE8ABF-B50A-4AAB-A69B-4E727AFDB6B5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.Domain", "modules\message\LINGYUN.Abp.MessageService.Domain\LINGYUN.Abp.MessageService.Domain.csproj", "{2094F03B-FC73-4B3F-88CB-F7951E22FED5}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.EntityFrameworkCore", "modules\message\LINGYUN.Abp.MessageService.EntityFrameworkCore\LINGYUN.Abp.MessageService.EntityFrameworkCore.csproj", "{554E5BCA-7F88-4E7C-86ED-8B6DE3A3A802}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.Application.Contracts", "modules\message\LINGYUN.Abp.MessageService.Application.Contracts\LINGYUN.Abp.MessageService.Application.Contracts.csproj", "{92E4CAD4-F5B9-4B16-B7BC-4A40DC1E93F1}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.Application", "modules\message\LINGYUN.Abp.MessageService.Application\LINGYUN.Abp.MessageService.Application.csproj", "{DB8CE5AF-1888-4C51-97C3-2188BE50FAF9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.HttpApi", "modules\message\LINGYUN.Abp.MessageService.HttpApi\LINGYUN.Abp.MessageService.HttpApi.csproj", "{54395254-0383-4932-B2E4-50932DAD7D10}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.HttpApi.Client", "modules\message\LINGYUN.Abp.MessageService.HttpApi.Client\LINGYUN.Abp.MessageService.HttpApi.Client.csproj", "{3E9CCC0A-DAD5-4F32-8EAE-654D67DEE2B9}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.HttpApi.Host", "services\messages\LINGYUN.Abp.MessageService.HttpApi.Host\LINGYUN.Abp.MessageService.HttpApi.Host.csproj", "{8168B7B4-9F6B-4658-A28C-D0F9D10AB93D}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wechat", "wechat", "{78164C5C-63B9-4FB6-ACC9-6496E236C946}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.WeChat.WeApp", "modules\wechat\LINGYUN.Abp.Notifications.WeChat\LINGYUN.Abp.Notifications.WeChat.WeApp.csproj", "{D7B2B2BE-C32C-47AE-A46C-62B7EF8C318E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation", "modules\common\LINGYUN.Abp.Features.LimitValidation\LINGYUN.Abp.Features.LimitValidation.csproj", "{93971F1F-F6AC-4F83-8119-21260FCE2828}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Authorization", "modules\wechat\LINGYUN.Abp.WeChat.Authorization\LINGYUN.Abp.WeChat.Authorization.csproj", "{ADB894C3-8CED-4809-8D85-478D2335CDA2}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat", "modules\wechat\LINGYUN.Abp.WeChat\LINGYUN.Abp.WeChat.csproj", "{3B87330F-A303-4413-B653-1C9536C74109}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "message", "message", "{D58F1DF5-2DFE-40A2-B136-7606D4CDE903}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{07BCD006-F2F2-4685-8887-E8BEB18745FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{07BCD006-F2F2-4685-8887-E8BEB18745FD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{07BCD006-F2F2-4685-8887-E8BEB18745FD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{07BCD006-F2F2-4685-8887-E8BEB18745FD}.Release|Any CPU.Build.0 = Release|Any CPU
{60E37E86-ACA6-4464-9592-B0D8EFB629BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{60E37E86-ACA6-4464-9592-B0D8EFB629BD}.Debug|Any CPU.Build.0 = Debug|Any CPU
{60E37E86-ACA6-4464-9592-B0D8EFB629BD}.Release|Any CPU.ActiveCfg = Release|Any CPU
{60E37E86-ACA6-4464-9592-B0D8EFB629BD}.Release|Any CPU.Build.0 = Release|Any CPU
{85B39FCE-6778-497C-A12E-6777C7FE651A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{85B39FCE-6778-497C-A12E-6777C7FE651A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{85B39FCE-6778-497C-A12E-6777C7FE651A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{85B39FCE-6778-497C-A12E-6777C7FE651A}.Release|Any CPU.Build.0 = Release|Any CPU
{8C973655-DF59-40D8-B206-82344575A8CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8C973655-DF59-40D8-B206-82344575A8CF}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8C973655-DF59-40D8-B206-82344575A8CF}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8C973655-DF59-40D8-B206-82344575A8CF}.Release|Any CPU.Build.0 = Release|Any CPU
{55B9F554-1754-4EF9-B325-B33421D4F6A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{55B9F554-1754-4EF9-B325-B33421D4F6A9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{55B9F554-1754-4EF9-B325-B33421D4F6A9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{55B9F554-1754-4EF9-B325-B33421D4F6A9}.Release|Any CPU.Build.0 = Release|Any CPU
{7AC8C076-87E2-48ED-8AB3-C1F737F55DD1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{7AC8C076-87E2-48ED-8AB3-C1F737F55DD1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7AC8C076-87E2-48ED-8AB3-C1F737F55DD1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7AC8C076-87E2-48ED-8AB3-C1F737F55DD1}.Release|Any CPU.Build.0 = Release|Any CPU
{C6F494D3-2C41-46DF-BCAD-F74D3E53CDE1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C6F494D3-2C41-46DF-BCAD-F74D3E53CDE1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C6F494D3-2C41-46DF-BCAD-F74D3E53CDE1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C6F494D3-2C41-46DF-BCAD-F74D3E53CDE1}.Release|Any CPU.Build.0 = Release|Any CPU
{3531699A-9FF9-4F8C-BEAD-9D114FE8E519}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3531699A-9FF9-4F8C-BEAD-9D114FE8E519}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3531699A-9FF9-4F8C-BEAD-9D114FE8E519}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3531699A-9FF9-4F8C-BEAD-9D114FE8E519}.Release|Any CPU.Build.0 = Release|Any CPU
{50DE8ABF-B50A-4AAB-A69B-4E727AFDB6B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{50DE8ABF-B50A-4AAB-A69B-4E727AFDB6B5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{50DE8ABF-B50A-4AAB-A69B-4E727AFDB6B5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{50DE8ABF-B50A-4AAB-A69B-4E727AFDB6B5}.Release|Any CPU.Build.0 = Release|Any CPU
{2094F03B-FC73-4B3F-88CB-F7951E22FED5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2094F03B-FC73-4B3F-88CB-F7951E22FED5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2094F03B-FC73-4B3F-88CB-F7951E22FED5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2094F03B-FC73-4B3F-88CB-F7951E22FED5}.Release|Any CPU.Build.0 = Release|Any CPU
{554E5BCA-7F88-4E7C-86ED-8B6DE3A3A802}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{554E5BCA-7F88-4E7C-86ED-8B6DE3A3A802}.Debug|Any CPU.Build.0 = Debug|Any CPU
{554E5BCA-7F88-4E7C-86ED-8B6DE3A3A802}.Release|Any CPU.ActiveCfg = Release|Any CPU
{554E5BCA-7F88-4E7C-86ED-8B6DE3A3A802}.Release|Any CPU.Build.0 = Release|Any CPU
{92E4CAD4-F5B9-4B16-B7BC-4A40DC1E93F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{92E4CAD4-F5B9-4B16-B7BC-4A40DC1E93F1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{92E4CAD4-F5B9-4B16-B7BC-4A40DC1E93F1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{92E4CAD4-F5B9-4B16-B7BC-4A40DC1E93F1}.Release|Any CPU.Build.0 = Release|Any CPU
{DB8CE5AF-1888-4C51-97C3-2188BE50FAF9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DB8CE5AF-1888-4C51-97C3-2188BE50FAF9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DB8CE5AF-1888-4C51-97C3-2188BE50FAF9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DB8CE5AF-1888-4C51-97C3-2188BE50FAF9}.Release|Any CPU.Build.0 = Release|Any CPU
{54395254-0383-4932-B2E4-50932DAD7D10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{54395254-0383-4932-B2E4-50932DAD7D10}.Debug|Any CPU.Build.0 = Debug|Any CPU
{54395254-0383-4932-B2E4-50932DAD7D10}.Release|Any CPU.ActiveCfg = Release|Any CPU
{54395254-0383-4932-B2E4-50932DAD7D10}.Release|Any CPU.Build.0 = Release|Any CPU
{3E9CCC0A-DAD5-4F32-8EAE-654D67DEE2B9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3E9CCC0A-DAD5-4F32-8EAE-654D67DEE2B9}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3E9CCC0A-DAD5-4F32-8EAE-654D67DEE2B9}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3E9CCC0A-DAD5-4F32-8EAE-654D67DEE2B9}.Release|Any CPU.Build.0 = Release|Any CPU
{8168B7B4-9F6B-4658-A28C-D0F9D10AB93D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8168B7B4-9F6B-4658-A28C-D0F9D10AB93D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8168B7B4-9F6B-4658-A28C-D0F9D10AB93D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8168B7B4-9F6B-4658-A28C-D0F9D10AB93D}.Release|Any CPU.Build.0 = Release|Any CPU
{D7B2B2BE-C32C-47AE-A46C-62B7EF8C318E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D7B2B2BE-C32C-47AE-A46C-62B7EF8C318E}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D7B2B2BE-C32C-47AE-A46C-62B7EF8C318E}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D7B2B2BE-C32C-47AE-A46C-62B7EF8C318E}.Release|Any CPU.Build.0 = Release|Any CPU
{93971F1F-F6AC-4F83-8119-21260FCE2828}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{93971F1F-F6AC-4F83-8119-21260FCE2828}.Debug|Any CPU.Build.0 = Debug|Any CPU
{93971F1F-F6AC-4F83-8119-21260FCE2828}.Release|Any CPU.ActiveCfg = Release|Any CPU
{93971F1F-F6AC-4F83-8119-21260FCE2828}.Release|Any CPU.Build.0 = Release|Any CPU
{ADB894C3-8CED-4809-8D85-478D2335CDA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{ADB894C3-8CED-4809-8D85-478D2335CDA2}.Debug|Any CPU.Build.0 = Debug|Any CPU
{ADB894C3-8CED-4809-8D85-478D2335CDA2}.Release|Any CPU.ActiveCfg = Release|Any CPU
{ADB894C3-8CED-4809-8D85-478D2335CDA2}.Release|Any CPU.Build.0 = Release|Any CPU
{3B87330F-A303-4413-B653-1C9536C74109}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{3B87330F-A303-4413-B653-1C9536C74109}.Debug|Any CPU.Build.0 = Debug|Any CPU
{3B87330F-A303-4413-B653-1C9536C74109}.Release|Any CPU.ActiveCfg = Release|Any CPU
{3B87330F-A303-4413-B653-1C9536C74109}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{C00828FB-E7D5-4086-BA50-02022594AB73} = {0C7AA298-2957-4D71-A8F1-1C3C7932A1B3}
{07BCD006-F2F2-4685-8887-E8BEB18745FD} = {C00828FB-E7D5-4086-BA50-02022594AB73}
{60E37E86-ACA6-4464-9592-B0D8EFB629BD} = {C00828FB-E7D5-4086-BA50-02022594AB73}
{85B39FCE-6778-497C-A12E-6777C7FE651A} = {C00828FB-E7D5-4086-BA50-02022594AB73}
{8C973655-DF59-40D8-B206-82344575A8CF} = {C00828FB-E7D5-4086-BA50-02022594AB73}
{55B9F554-1754-4EF9-B325-B33421D4F6A9} = {C00828FB-E7D5-4086-BA50-02022594AB73}
{7AC8C076-87E2-48ED-8AB3-C1F737F55DD1} = {C00828FB-E7D5-4086-BA50-02022594AB73}
{C6F494D3-2C41-46DF-BCAD-F74D3E53CDE1} = {C00828FB-E7D5-4086-BA50-02022594AB73}
{3531699A-9FF9-4F8C-BEAD-9D114FE8E519} = {C00828FB-E7D5-4086-BA50-02022594AB73}
{50DE8ABF-B50A-4AAB-A69B-4E727AFDB6B5} = {D58F1DF5-2DFE-40A2-B136-7606D4CDE903}
{2094F03B-FC73-4B3F-88CB-F7951E22FED5} = {D58F1DF5-2DFE-40A2-B136-7606D4CDE903}
{554E5BCA-7F88-4E7C-86ED-8B6DE3A3A802} = {D58F1DF5-2DFE-40A2-B136-7606D4CDE903}
{92E4CAD4-F5B9-4B16-B7BC-4A40DC1E93F1} = {D58F1DF5-2DFE-40A2-B136-7606D4CDE903}
{DB8CE5AF-1888-4C51-97C3-2188BE50FAF9} = {D58F1DF5-2DFE-40A2-B136-7606D4CDE903}
{54395254-0383-4932-B2E4-50932DAD7D10} = {D58F1DF5-2DFE-40A2-B136-7606D4CDE903}
{3E9CCC0A-DAD5-4F32-8EAE-654D67DEE2B9} = {D58F1DF5-2DFE-40A2-B136-7606D4CDE903}
{8168B7B4-9F6B-4658-A28C-D0F9D10AB93D} = {E7A821D8-85B5-4098-897D-5A814BD8131D}
{78164C5C-63B9-4FB6-ACC9-6496E236C946} = {0C7AA298-2957-4D71-A8F1-1C3C7932A1B3}
{D7B2B2BE-C32C-47AE-A46C-62B7EF8C318E} = {78164C5C-63B9-4FB6-ACC9-6496E236C946}
{93971F1F-F6AC-4F83-8119-21260FCE2828} = {C00828FB-E7D5-4086-BA50-02022594AB73}
{ADB894C3-8CED-4809-8D85-478D2335CDA2} = {78164C5C-63B9-4FB6-ACC9-6496E236C946}
{3B87330F-A303-4413-B653-1C9536C74109} = {78164C5C-63B9-4FB6-ACC9-6496E236C946}
{D58F1DF5-2DFE-40A2-B136-7606D4CDE903} = {0C7AA298-2957-4D71-A8F1-1C3C7932A1B3}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {6238659A-7267-49B9-A499-8746BDEED6B8}
EndGlobalSection
EndGlobal

115
aspnet-core/LINGYUN.MicroService.Platform.sln

@ -0,0 +1,115 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.30011.22
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "modules", "modules", "{15BDA03E-DE8E-46E4-96A8-CA3F2872E812}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "services", "services", "{B81EF311-D7FD-4F07-9DC6-96D9BB517A74}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Domain.Shared", "modules\platform\LINGYUN.Platform.Domain.Shared\LINGYUN.Platform.Domain.Shared.csproj", "{6EE3ADC1-5E58-4A2E-B5DB-85163D9A0156}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Domain", "modules\platform\LINGYUN.Platform.Domain\LINGYUN.Platform.Domain.csproj", "{746E0357-5AA9-4F7A-B85E-E8F83EE5A749}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.EntityFrameworkCore", "modules\platform\LINGYUN.Platform.EntityFrameworkCore\LINGYUN.Platform.EntityFrameworkCore.csproj", "{939EF41A-E38F-4693-91D2-7B871D89DC5A}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Application.Contracts", "modules\platform\LINGYUN.Platform.Application.Contracts\LINGYUN.Platform.Application.Contracts.csproj", "{2B49B1C8-EE71-4F68-9501-EA5222381CC7}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Application", "modules\platform\LINGYUN.Platform.Application\LINGYUN.Platform.Application.csproj", "{462FFFC0-CAFA-462C-A65D-DEAA91EE5449}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.HttpApi", "modules\platform\LINGYUN.Platform.HttpApi\LINGYUN.Platform.HttpApi.csproj", "{BDBCCE63-F4BB-405A-8620-58743A905F98}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.HttpApi.Host", "services\platform\LINGYUN.Platform.HttpApi.Host\LINGYUN.Platform.HttpApi.Host.csproj", "{D1DD7E12-EFA4-4068-8B6D-0D0612ACA8EE}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "platform", "platform", "{4096EC6A-EEAD-4E5B-B087-393D7A4E5874}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "file-management", "file-management", "{C7D0EB39-3418-4A7C-AD94-FAB76F023E88}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FileManagement.Domain.Shared", "modules\file-management\LINGYUN.Abp.FileManagement.Domain.Shared\LINGYUN.Abp.FileManagement.Domain.Shared.csproj", "{4D3C1EBD-1A4A-4300-A889-72DA0E082BAE}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FileManagement.Domain", "modules\file-management\LINGYUN.Abp.FileManagement.Domain\LINGYUN.Abp.FileManagement.Domain.csproj", "{D6D4C667-B58C-4266-9929-AFE54C8F0FBA}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FileManagement.Application.Contracts", "modules\file-management\LINGYUN.Abp.FileManagement.Application.Contracts\LINGYUN.Abp.FileManagement.Application.Contracts.csproj", "{A1561B9D-2EAB-4C6A-AE62-9D517A450D4D}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FileManagement.Application", "modules\file-management\LINGYUN.Abp.FileManagement.Application\LINGYUN.Abp.FileManagement.Application.csproj", "{1C3A25AF-9A59-4532-88A4-E57BECFA7E96}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FileManagement.HttpApi", "modules\file-management\LINGYUN.Abp.FileManagement.HttpApi\LINGYUN.Abp.FileManagement.HttpApi.csproj", "{C616C167-E5DF-4141-98BE-F98C58890122}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Release|Any CPU = Release|Any CPU
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{6EE3ADC1-5E58-4A2E-B5DB-85163D9A0156}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6EE3ADC1-5E58-4A2E-B5DB-85163D9A0156}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6EE3ADC1-5E58-4A2E-B5DB-85163D9A0156}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6EE3ADC1-5E58-4A2E-B5DB-85163D9A0156}.Release|Any CPU.Build.0 = Release|Any CPU
{746E0357-5AA9-4F7A-B85E-E8F83EE5A749}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{746E0357-5AA9-4F7A-B85E-E8F83EE5A749}.Debug|Any CPU.Build.0 = Debug|Any CPU
{746E0357-5AA9-4F7A-B85E-E8F83EE5A749}.Release|Any CPU.ActiveCfg = Release|Any CPU
{746E0357-5AA9-4F7A-B85E-E8F83EE5A749}.Release|Any CPU.Build.0 = Release|Any CPU
{939EF41A-E38F-4693-91D2-7B871D89DC5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{939EF41A-E38F-4693-91D2-7B871D89DC5A}.Debug|Any CPU.Build.0 = Debug|Any CPU
{939EF41A-E38F-4693-91D2-7B871D89DC5A}.Release|Any CPU.ActiveCfg = Release|Any CPU
{939EF41A-E38F-4693-91D2-7B871D89DC5A}.Release|Any CPU.Build.0 = Release|Any CPU
{2B49B1C8-EE71-4F68-9501-EA5222381CC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2B49B1C8-EE71-4F68-9501-EA5222381CC7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2B49B1C8-EE71-4F68-9501-EA5222381CC7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2B49B1C8-EE71-4F68-9501-EA5222381CC7}.Release|Any CPU.Build.0 = Release|Any CPU
{462FFFC0-CAFA-462C-A65D-DEAA91EE5449}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{462FFFC0-CAFA-462C-A65D-DEAA91EE5449}.Debug|Any CPU.Build.0 = Debug|Any CPU
{462FFFC0-CAFA-462C-A65D-DEAA91EE5449}.Release|Any CPU.ActiveCfg = Release|Any CPU
{462FFFC0-CAFA-462C-A65D-DEAA91EE5449}.Release|Any CPU.Build.0 = Release|Any CPU
{BDBCCE63-F4BB-405A-8620-58743A905F98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BDBCCE63-F4BB-405A-8620-58743A905F98}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BDBCCE63-F4BB-405A-8620-58743A905F98}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BDBCCE63-F4BB-405A-8620-58743A905F98}.Release|Any CPU.Build.0 = Release|Any CPU
{D1DD7E12-EFA4-4068-8B6D-0D0612ACA8EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D1DD7E12-EFA4-4068-8B6D-0D0612ACA8EE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D1DD7E12-EFA4-4068-8B6D-0D0612ACA8EE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D1DD7E12-EFA4-4068-8B6D-0D0612ACA8EE}.Release|Any CPU.Build.0 = Release|Any CPU
{4D3C1EBD-1A4A-4300-A889-72DA0E082BAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4D3C1EBD-1A4A-4300-A889-72DA0E082BAE}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4D3C1EBD-1A4A-4300-A889-72DA0E082BAE}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4D3C1EBD-1A4A-4300-A889-72DA0E082BAE}.Release|Any CPU.Build.0 = Release|Any CPU
{D6D4C667-B58C-4266-9929-AFE54C8F0FBA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D6D4C667-B58C-4266-9929-AFE54C8F0FBA}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D6D4C667-B58C-4266-9929-AFE54C8F0FBA}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D6D4C667-B58C-4266-9929-AFE54C8F0FBA}.Release|Any CPU.Build.0 = Release|Any CPU
{A1561B9D-2EAB-4C6A-AE62-9D517A450D4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{A1561B9D-2EAB-4C6A-AE62-9D517A450D4D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{A1561B9D-2EAB-4C6A-AE62-9D517A450D4D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{A1561B9D-2EAB-4C6A-AE62-9D517A450D4D}.Release|Any CPU.Build.0 = Release|Any CPU
{1C3A25AF-9A59-4532-88A4-E57BECFA7E96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{1C3A25AF-9A59-4532-88A4-E57BECFA7E96}.Debug|Any CPU.Build.0 = Debug|Any CPU
{1C3A25AF-9A59-4532-88A4-E57BECFA7E96}.Release|Any CPU.ActiveCfg = Release|Any CPU
{1C3A25AF-9A59-4532-88A4-E57BECFA7E96}.Release|Any CPU.Build.0 = Release|Any CPU
{C616C167-E5DF-4141-98BE-F98C58890122}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{C616C167-E5DF-4141-98BE-F98C58890122}.Debug|Any CPU.Build.0 = Debug|Any CPU
{C616C167-E5DF-4141-98BE-F98C58890122}.Release|Any CPU.ActiveCfg = Release|Any CPU
{C616C167-E5DF-4141-98BE-F98C58890122}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{6EE3ADC1-5E58-4A2E-B5DB-85163D9A0156} = {4096EC6A-EEAD-4E5B-B087-393D7A4E5874}
{746E0357-5AA9-4F7A-B85E-E8F83EE5A749} = {4096EC6A-EEAD-4E5B-B087-393D7A4E5874}
{939EF41A-E38F-4693-91D2-7B871D89DC5A} = {4096EC6A-EEAD-4E5B-B087-393D7A4E5874}
{2B49B1C8-EE71-4F68-9501-EA5222381CC7} = {4096EC6A-EEAD-4E5B-B087-393D7A4E5874}
{462FFFC0-CAFA-462C-A65D-DEAA91EE5449} = {4096EC6A-EEAD-4E5B-B087-393D7A4E5874}
{BDBCCE63-F4BB-405A-8620-58743A905F98} = {4096EC6A-EEAD-4E5B-B087-393D7A4E5874}
{D1DD7E12-EFA4-4068-8B6D-0D0612ACA8EE} = {B81EF311-D7FD-4F07-9DC6-96D9BB517A74}
{4096EC6A-EEAD-4E5B-B087-393D7A4E5874} = {15BDA03E-DE8E-46E4-96A8-CA3F2872E812}
{C7D0EB39-3418-4A7C-AD94-FAB76F023E88} = {15BDA03E-DE8E-46E4-96A8-CA3F2872E812}
{4D3C1EBD-1A4A-4300-A889-72DA0E082BAE} = {C7D0EB39-3418-4A7C-AD94-FAB76F023E88}
{D6D4C667-B58C-4266-9929-AFE54C8F0FBA} = {C7D0EB39-3418-4A7C-AD94-FAB76F023E88}
{A1561B9D-2EAB-4C6A-AE62-9D517A450D4D} = {C7D0EB39-3418-4A7C-AD94-FAB76F023E88}
{1C3A25AF-9A59-4532-88A4-E57BECFA7E96} = {C7D0EB39-3418-4A7C-AD94-FAB76F023E88}
{C616C167-E5DF-4141-98BE-F98C58890122} = {C7D0EB39-3418-4A7C-AD94-FAB76F023E88}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {03D3B66F-8926-4C00-B7AB-A21761EC859E}
EndGlobalSection
EndGlobal

20
aspnet-core/database/ApiGateway-Init-SqlServer.sql

File diff suppressed because one or more lines are too long

98
aspnet-core/database/ApiGateway-Init.sql

@ -11,7 +11,7 @@
Target Server Version : 80020
File Encoding : 65001
Date: 23/10/2020 19:13:56
Date: 31/10/2020 11:28:59
*/
SET NAMES utf8mb4;
@ -54,7 +54,7 @@ CREATE TABLE `appapigatewayaggregate` (
`Priority` int(0) NULL DEFAULT NULL,
`UpstreamHttpMethod` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 8 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of appapigatewayaggregate
@ -76,7 +76,7 @@ CREATE TABLE `appapigatewayaggregateconfig` (
PRIMARY KEY (`Id`) USING BTREE,
INDEX `IX_AppApiGatewayAggregateConfig_AggregateReRouteId`(`AggregateReRouteId`) USING BTREE,
CONSTRAINT `FK_AppApiGatewayAggregateConfig_AppApiGatewayAggregate_Aggregat~` FOREIGN KEY (`AggregateReRouteId`) REFERENCES `appapigatewayaggregate` (`Id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for appapigatewayauthoptions
@ -90,7 +90,7 @@ CREATE TABLE `appapigatewayauthoptions` (
PRIMARY KEY (`Id`) USING BTREE,
UNIQUE INDEX `IX_AppApiGatewayAuthOptions_ReRouteId`(`ReRouteId`) USING BTREE,
CONSTRAINT `FK_AppApiGatewayAuthOptions_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 145 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
) ENGINE = InnoDB AUTO_INCREMENT = 149 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of appapigatewayauthoptions
@ -205,6 +205,11 @@ INSERT INTO `appapigatewayauthoptions` VALUES (141, 1319554948434595840, '', '')
INSERT INTO `appapigatewayauthoptions` VALUES (142, 1319555067183730688, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (143, 1319555230765780992, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (144, 1319555333790470144, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (145, 1321001932510203904, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (146, 1321002059803136000, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (147, 1321002256440496128, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (148, 1321002350686507008, '', '');
INSERT INTO `appapigatewayauthoptions` VALUES (149, 1322190027988525056, '', '');
-- ----------------------------
-- Table structure for appapigatewaybalanceroptions
@ -222,7 +227,7 @@ CREATE TABLE `appapigatewaybalanceroptions` (
UNIQUE INDEX `IX_AppApiGatewayBalancerOptions_ReRouteId`(`ReRouteId`) USING BTREE,
CONSTRAINT `FK_AppApiGatewayBalancerOptions_AppApiGatewayGlobalConfiguratio~` FOREIGN KEY (`ItemId`) REFERENCES `appapigatewayglobalconfiguration` (`ItemId`) ON DELETE CASCADE ON UPDATE RESTRICT,
CONSTRAINT `FK_AppApiGatewayBalancerOptions_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 148 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
) ENGINE = InnoDB AUTO_INCREMENT = 152 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of appapigatewaybalanceroptions
@ -338,6 +343,11 @@ INSERT INTO `appapigatewaybalanceroptions` VALUES (144, NULL, 131955494843459584
INSERT INTO `appapigatewaybalanceroptions` VALUES (145, NULL, 1319555067183730688, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (146, NULL, 1319555230765780992, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (147, NULL, 1319555333790470144, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (148, NULL, 1321001932510203904, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (149, NULL, 1321002059803136000, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (150, NULL, 1321002256440496128, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (151, NULL, 1321002350686507008, '', '', 0);
INSERT INTO `appapigatewaybalanceroptions` VALUES (152, NULL, 1322190027988525056, '', '', 0);
-- ----------------------------
-- Table structure for appapigatewaycacheoptions
@ -351,7 +361,7 @@ CREATE TABLE `appapigatewaycacheoptions` (
PRIMARY KEY (`Id`) USING BTREE,
UNIQUE INDEX `IX_AppApiGatewayCacheOptions_ReRouteId`(`ReRouteId`) USING BTREE,
CONSTRAINT `FK_AppApiGatewayCacheOptions_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 145 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
) ENGINE = InnoDB AUTO_INCREMENT = 149 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of appapigatewaycacheoptions
@ -466,6 +476,11 @@ INSERT INTO `appapigatewaycacheoptions` VALUES (141, 1319554948434595840, 0, '')
INSERT INTO `appapigatewaycacheoptions` VALUES (142, 1319555067183730688, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (143, 1319555230765780992, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (144, 1319555333790470144, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (145, 1321001932510203904, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (146, 1321002059803136000, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (147, 1321002256440496128, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (148, 1321002350686507008, 0, '');
INSERT INTO `appapigatewaycacheoptions` VALUES (149, 1322190027988525056, 0, '');
-- ----------------------------
-- Table structure for appapigatewaydiscovery
@ -485,7 +500,7 @@ CREATE TABLE `appapigatewaydiscovery` (
PRIMARY KEY (`Id`) USING BTREE,
UNIQUE INDEX `IX_AppApiGatewayDiscovery_ItemId`(`ItemId`) USING BTREE,
CONSTRAINT `FK_AppApiGatewayDiscovery_AppApiGatewayGlobalConfiguration_Item~` FOREIGN KEY (`ItemId`) REFERENCES `appapigatewayglobalconfiguration` (`ItemId`) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of appapigatewaydiscovery
@ -506,7 +521,7 @@ CREATE TABLE `appapigatewaydynamicreroute` (
`AppId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
PRIMARY KEY (`Id`) USING BTREE,
UNIQUE INDEX `AK_AppApiGatewayDynamicReRoute_DynamicReRouteId`(`DynamicReRouteId`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for appapigatewayglobalconfiguration
@ -526,7 +541,7 @@ CREATE TABLE `appapigatewayglobalconfiguration` (
`AppId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
PRIMARY KEY (`Id`) USING BTREE,
UNIQUE INDEX `AK_AppApiGatewayGlobalConfiguration_ItemId`(`ItemId`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of appapigatewayglobalconfiguration
@ -543,7 +558,7 @@ CREATE TABLE `appapigatewayheaders` (
`Key` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`Value` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for appapigatewayhostandport
@ -555,7 +570,7 @@ CREATE TABLE `appapigatewayhostandport` (
`Host` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`Port` int(0) NULL DEFAULT 0,
PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
) ENGINE = InnoDB CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Table structure for appapigatewayhttpoptions
@ -575,7 +590,7 @@ CREATE TABLE `appapigatewayhttpoptions` (
UNIQUE INDEX `IX_AppApiGatewayHttpOptions_ReRouteId`(`ReRouteId`) USING BTREE,
CONSTRAINT `FK_AppApiGatewayHttpOptions_AppApiGatewayGlobalConfiguration_It~` FOREIGN KEY (`ItemId`) REFERENCES `appapigatewayglobalconfiguration` (`ItemId`) ON DELETE CASCADE ON UPDATE RESTRICT,
CONSTRAINT `FK_AppApiGatewayHttpOptions_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 148 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
) ENGINE = InnoDB AUTO_INCREMENT = 152 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of appapigatewayhttpoptions
@ -691,6 +706,11 @@ INSERT INTO `appapigatewayhttpoptions` VALUES (144, NULL, 1319554948434595840, 0
INSERT INTO `appapigatewayhttpoptions` VALUES (145, NULL, 1319555067183730688, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (146, NULL, 1319555230765780992, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (147, NULL, 1319555333790470144, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (148, NULL, 1321001932510203904, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (149, NULL, 1321002059803136000, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (150, NULL, 1321002256440496128, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (151, NULL, 1321002350686507008, 0, 0, 0, 0, 0);
INSERT INTO `appapigatewayhttpoptions` VALUES (152, NULL, 1322190027988525056, 0, 0, 0, 0, 0);
-- ----------------------------
-- Table structure for appapigatewayqosoptions
@ -708,7 +728,7 @@ CREATE TABLE `appapigatewayqosoptions` (
UNIQUE INDEX `IX_AppApiGatewayQoSOptions_ReRouteId`(`ReRouteId`) USING BTREE,
CONSTRAINT `FK_AppApiGatewayQoSOptions_AppApiGatewayGlobalConfiguration_Ite~` FOREIGN KEY (`ItemId`) REFERENCES `appapigatewayglobalconfiguration` (`ItemId`) ON DELETE CASCADE ON UPDATE RESTRICT,
CONSTRAINT `FK_AppApiGatewayQoSOptions_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 148 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
) ENGINE = InnoDB AUTO_INCREMENT = 152 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of appapigatewayqosoptions
@ -824,6 +844,11 @@ INSERT INTO `appapigatewayqosoptions` VALUES (144, NULL, 1319554948434595840, 50
INSERT INTO `appapigatewayqosoptions` VALUES (145, NULL, 1319555067183730688, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (146, NULL, 1319555230765780992, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (147, NULL, 1319555333790470144, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (148, NULL, 1321001932510203904, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (149, NULL, 1321002059803136000, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (150, NULL, 1321002256440496128, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (151, NULL, 1321002350686507008, 50, 60000, 30000);
INSERT INTO `appapigatewayqosoptions` VALUES (152, NULL, 1322190027988525056, 50, 60000, 30000);
-- ----------------------------
-- Table structure for appapigatewayratelimitoptions
@ -840,7 +865,7 @@ CREATE TABLE `appapigatewayratelimitoptions` (
PRIMARY KEY (`Id`) USING BTREE,
UNIQUE INDEX `IX_AppApiGatewayRateLimitOptions_ItemId`(`ItemId`) USING BTREE,
CONSTRAINT `FK_AppApiGatewayRateLimitOptions_AppApiGatewayGlobalConfigurati~` FOREIGN KEY (`ItemId`) REFERENCES `appapigatewayglobalconfiguration` (`ItemId`) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of appapigatewayratelimitoptions
@ -865,7 +890,7 @@ CREATE TABLE `appapigatewayratelimitrule` (
UNIQUE INDEX `IX_AppApiGatewayRateLimitRule_ReRouteId`(`ReRouteId`) USING BTREE,
CONSTRAINT `FK_AppApiGatewayRateLimitRule_AppApiGatewayDynamicReRoute_Dynam~` FOREIGN KEY (`DynamicReRouteId`) REFERENCES `appapigatewaydynamicreroute` (`DynamicReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT,
CONSTRAINT `FK_AppApiGatewayRateLimitRule_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 145 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
) ENGINE = InnoDB AUTO_INCREMENT = 149 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of appapigatewayratelimitrule
@ -980,6 +1005,11 @@ INSERT INTO `appapigatewayratelimitrule` VALUES (141, 1319554948434595840, NULL,
INSERT INTO `appapigatewayratelimitrule` VALUES (142, 1319555067183730688, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (143, 1319555230765780992, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (144, 1319555333790470144, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (145, 1321001932510203904, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (146, 1321002059803136000, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (147, 1321002256440496128, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (148, 1321002350686507008, NULL, '', 0, NULL, NULL, NULL);
INSERT INTO `appapigatewayratelimitrule` VALUES (149, 1322190027988525056, NULL, '', 0, NULL, NULL, NULL);
-- ----------------------------
-- Table structure for appapigatewayreroute
@ -1019,7 +1049,7 @@ CREATE TABLE `appapigatewayreroute` (
PRIMARY KEY (`Id`) USING BTREE,
UNIQUE INDEX `AK_AppApiGatewayReRoute_ReRouteId`(`ReRouteId`) USING BTREE,
UNIQUE INDEX `IX_AppApiGatewayReRoute_AppId_DownstreamPathTemplate_UpstreamPa~`(`AppId`, `DownstreamPathTemplate`, `UpstreamPathTemplate`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 152 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
) ENGINE = InnoDB AUTO_INCREMENT = 156 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of appapigatewayreroute
@ -1081,8 +1111,8 @@ INSERT INTO `appapigatewayreroute` VALUES (67, '{}', '755b4dce5c34444785fa3b647f
INSERT INTO `appapigatewayreroute` VALUES (68, '{}', '535191c570ae453ab320012304d7a62c', 1264800070161584128, '【身份认证服务】- 手机号注册', '/api/account/phone/register', '', '', '/api/account/phone/register', 'POST,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30015,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (69, '{}', '723c9b111f9f4a1aa804118cdde193d3', 1267360794414161920, '【消息服务】- 通知', '/signalr-hubs/notifications/{everything}', '', '', '/signalr-hubs/notifications/{everything}', 'POST,GET,OPTIONS,PUT,DELETE,', '', '', '', '', '', '', '', 1, '', '', 'ws', '127.0.0.1:30020,', '', '', '', 1, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (70, '{}', 'f3aa2b42dd9f468aa5aae4ef64754427', 1267383367629807616, '【消息服务】- 通知0', '/signalr-hubs/notifications', '', '', '/signalr-hubs/notifications', 'GET,POST,PUT,DELETE,OPTIONS,', '', '', '', '', '', '', '', 1, '', '', 'ws', '127.0.0.1:30020,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (71, '{}', '99dc8259c50044008c8aede7442ddde3', 1267817055527632896, '【消息服务】- 聊天', '/signalr-hubs/message', '', '', '/signalr-hubs/message', 'GET,POST,PUT,DELETE,OPTIONS,', '', '', '', '', '', '', '', 1, '', '', 'ws', '127.0.0.1:30020,', '', '', '', 1, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (72, '{}', '4ec40b72d469474ba10ae02e8d3298bb', 1267817221286526976, '【消息服务】- 聊天1', '/signalr-hubs/message/{everything}', '', '', '/signalr-hubs/message/{everything}', 'GET,POST,PUT,DELETE,OPTIONS,', '', '', '', '', '', '', '', 1, '', '', 'ws', '127.0.0.1:30020,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (71, '{}', '0344947bb79b401baa2ef7b4e58297f6', 1267817055527632896, '【消息服务】- 聊天', '/signalr-hubs/messages', '', '', '/signalr-hubs/messages', 'GET,POST,PUT,DELETE,OPTIONS,', '', '', '', '', '', '', '', 1, '', '', 'ws', '127.0.0.1:30020,', '', '', '', 1, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (72, '{}', '6676b5e5f76d40739f9ccc3e371e2f18', 1267817221286526976, '【消息服务】- 聊天1', '/signalr-hubs/messages/{everything}', '', '', '/signalr-hubs/messages/{everything}', 'GET,POST,PUT,DELETE,OPTIONS,', '', '', '', '', '', '', '', 1, '', '', 'ws', '127.0.0.1:30020,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (73, '{}', 'cfb5f09a12bf495fbcaf2fa5d9123a40', 1268893687085518848, '【身份认证服务】- 重置密码', '/api/account/phone/reset-password', '', '', '/api/account/phone/reset-password', 'PUT,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30015,', '', '', '', 1, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (101, '{}', '997a4c27a433458aafed9b8aa252d957', 1288657613998579712, '【身份认证服务】- 组织机构列表', '/api/identity/organization-units', '', '', '/api/identity/organization-units', 'GET,POST,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30015,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (102, '{}', 'a2c6acc9882a425ab26bd3ad5a9c17c6', 1288657941770854400, '【身份认证服务】- 组织机构管理', '/api/identity/organization-units/{id}', '', '', '/api/identity/organization-units/{id}', 'GET,PUT,DELETE,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30015,', '', '', '', 1, 30000, 1, '', 'TEST-APP');
@ -1134,6 +1164,11 @@ INSERT INTO `appapigatewayreroute` VALUES (148, '{}', '824f5eee6877489f96f1022e3
INSERT INTO `appapigatewayreroute` VALUES (149, '{}', 'fe1379d4a13f41afb6410f4c948871f3', 1319555067183730688, '【身份认证服务】- 删除角色组织机构', '/api/identity/roles/{id}/organization-units/{ouId}', '', '', '/api/identity/roles/{id}/organization-units/{ouId}', 'DELETE,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30015,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (150, '{}', '197a69bb723346aba3601bd61e7fa655', 1319555230765780992, '【身份认证服务】- 管理用户组织机构', '/api/identity/users/{id}/organization-units', '', '', '/api/identity/users/{id}/organization-units', 'GET,PUT,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30015,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (151, '{}', '1a7e6d0b1c95484f82a75a2ce6e6f453', 1319555333790470144, '【身份认证服务】- 删除用户组织机构', '/api/identity/users/{id}/organization-units/{ouId}', '', '', '/api/identity/users/{id}/organization-units/{ouId}', 'DELETE,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30015,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (152, '{}', 'ecfa9bbd19694097b33e691b653f2124', 1321001932510203904, '【消息服务】- 我的消息', '/api/im/chat/my-messages', '', '', '/api/im/chat/my-messages', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30020,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (153, '{}', '4867ad188ca54acb8b961d20297b6545', 1321002059803136000, '【消息服务】- 我的最近消息', '/api/im/chat/my-last-messages', '', '', '/api/im/chat/my-last-messages', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30020,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (154, '{}', '291ab802d7bc4af98fc15c509f98fa75', 1321002256440496128, '【消息服务】- 我的朋友', '/api/im/my-friends', '', '', '/api/im/my-friends', 'GET,POST,DELETE,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30020,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (155, '{}', '08438dabb1e849988e0c304f82b08a10', 1321002350686507008, '【消息服务】- 我的所有朋友', '/api/im/my-friends/all', '', '', '/api/im/my-friends/all', 'GET,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30020,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
INSERT INTO `appapigatewayreroute` VALUES (156, '{}', 'cecf632785b7402299764698369c751f', 1322190027988525056, '【消息服务】- 发送好友请求', '/api/im/my-friends/add-request', '', '', '/api/im/my-friends/add-request', 'POST,', '', '', '', '', '', '', '', 1, '', '', 'HTTP', '127.0.0.1:30020,', '', '', '', 0, 30000, 1, '', 'TEST-APP');
-- ----------------------------
-- Table structure for appapigatewayroutegroup
@ -1177,7 +1212,7 @@ CREATE TABLE `appapigatewaysecurityoptions` (
PRIMARY KEY (`Id`) USING BTREE,
UNIQUE INDEX `IX_AppApiGatewaySecurityOptions_ReRouteId`(`ReRouteId`) USING BTREE,
CONSTRAINT `FK_AppApiGatewaySecurityOptions_AppApiGatewayReRoute_ReRouteId` FOREIGN KEY (`ReRouteId`) REFERENCES `appapigatewayreroute` (`ReRouteId`) ON DELETE CASCADE ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 145 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
) ENGINE = InnoDB AUTO_INCREMENT = 149 CHARACTER SET = latin1 COLLATE = latin1_swedish_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of appapigatewaysecurityoptions
@ -1292,6 +1327,11 @@ INSERT INTO `appapigatewaysecurityoptions` VALUES (141, 1319554948434595840, '',
INSERT INTO `appapigatewaysecurityoptions` VALUES (142, 1319555067183730688, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (143, 1319555230765780992, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (144, 1319555333790470144, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (145, 1321001932510203904, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (146, 1321002059803136000, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (147, 1321002256440496128, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (148, 1321002350686507008, '', '');
INSERT INTO `appapigatewaysecurityoptions` VALUES (149, 1322190027988525056, '', '');
-- ----------------------------
-- Table structure for cap.published
@ -1313,25 +1353,7 @@ CREATE TABLE `cap.published` (
-- ----------------------------
-- Records of cap.published
-- ----------------------------
INSERT INTO `cap.published` VALUES (1319249373444280320, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1319249373444280320\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/10/22 20:08:55 +08:00\",\"cap-corr-id\":\"1319249373444280320\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-10-22T20:08:55.7543668+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Modify\",\"Object\":\"ReRoute\"}}', 0, '2020-10-22 20:08:56', '2020-10-23 20:08:56', 'Succeeded');
INSERT INTO `cap.published` VALUES (1319249405602009088, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1319249405602009088\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/10/22 20:09:03 +08:00\",\"cap-corr-id\":\"1319249405602009088\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-10-22T20:09:03.4203308+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Modify\",\"Object\":\"ReRoute\"}}', 0, '2020-10-22 20:09:03', '2020-10-23 20:09:03', 'Succeeded');
INSERT INTO `cap.published` VALUES (1319249482190000128, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1319249482190000128\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/10/22 20:09:21 +08:00\",\"cap-corr-id\":\"1319249482190000128\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-10-22T20:09:21.681402+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Modify\",\"Object\":\"ReRoute\"}}', 0, '2020-10-22 20:09:22', '2020-10-23 20:09:22', 'Succeeded');
INSERT INTO `cap.published` VALUES (1319249848986079232, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1319249848986079232\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/10/22 20:10:49 +08:00\",\"cap-corr-id\":\"1319249848986079232\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-10-22T20:10:49.1328929+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Create\",\"Object\":\"AggregateRoute\"}}', 0, '2020-10-22 20:10:49', '2020-10-23 20:10:49', 'Succeeded');
INSERT INTO `cap.published` VALUES (1319250220064542720, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1319250220064542720\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/10/22 20:12:17 +08:00\",\"cap-corr-id\":\"1319250220064542720\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-10-22T20:12:17.6028009+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Update\",\"Object\":\"AggregateRoute\"}}', 0, '2020-10-22 20:12:18', '2020-10-23 20:12:18', 'Succeeded');
INSERT INTO `cap.published` VALUES (1319253036082499584, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1319253036082499584\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/10/22 20:23:28 +08:00\",\"cap-corr-id\":\"1319253036082499584\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-10-22T20:23:28.995489+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"AddRouteConfig\",\"Object\":\"AggregateRoute\"}}', 0, '2020-10-22 20:23:29', '2020-10-23 20:23:29', 'Succeeded');
INSERT INTO `cap.published` VALUES (1319269094700978176, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1319269094700978176\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/10/22 21:27:17 +08:00\",\"cap-corr-id\":\"1319269094700978176\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-10-22T21:27:17.6683764+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Delete\",\"Object\":\"AggregateRoute\"}}', 0, '2020-10-22 21:27:18', '2020-10-23 21:27:18', 'Succeeded');
INSERT INTO `cap.published` VALUES (1319269302629404672, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1319269302629404672\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/10/22 21:28:07 +08:00\",\"cap-corr-id\":\"1319269302629404672\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-10-22T21:28:07.2407943+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Delete\",\"Object\":\"AggregateRoute\"}}', 0, '2020-10-22 21:28:07', '2020-10-23 21:28:07', 'Succeeded');
INSERT INTO `cap.published` VALUES (1319269513921662976, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1319269513921662976\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/10/22 21:28:57 +08:00\",\"cap-corr-id\":\"1319269513921662976\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-10-22T21:28:57.6185875+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Delete\",\"Object\":\"AggregateRoute\"}}', 0, '2020-10-22 21:28:58', '2020-10-23 21:28:58', 'Succeeded');
INSERT INTO `cap.published` VALUES (1319554100082085888, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1319554100082085888\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/10/23 16:19:48 +08:00\",\"cap-corr-id\":\"1319554100082085888\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-10-23T16:19:48.2464771+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Modify\",\"Object\":\"ReRoute\"}}', 0, '2020-10-23 16:19:48', '2020-10-24 16:19:48', 'Succeeded');
INSERT INTO `cap.published` VALUES (1319554182298832896, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1319554182298832896\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/10/23 16:20:07 +08:00\",\"cap-corr-id\":\"1319554182298832896\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-10-23T16:20:07.8366727+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Modify\",\"Object\":\"ReRoute\"}}', 0, '2020-10-23 16:20:08', '2020-10-24 16:20:08', 'Succeeded');
INSERT INTO `cap.published` VALUES (1319554431205609472, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1319554431205609472\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/10/23 16:21:07 +08:00\",\"cap-corr-id\":\"1319554431205609472\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-10-23T16:21:07.192283+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Create\",\"Object\":\"ReRoute\"}}', 0, '2020-10-23 16:21:07', '2020-10-24 16:21:07', 'Succeeded');
INSERT INTO `cap.published` VALUES (1319554550520975360, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1319554550520975360\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/10/23 16:21:35 +08:00\",\"cap-corr-id\":\"1319554550520975360\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-10-23T16:21:35.6396895+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Create\",\"Object\":\"ReRoute\"}}', 0, '2020-10-23 16:21:36', '2020-10-24 16:21:36', 'Succeeded');
INSERT INTO `cap.published` VALUES (1319554948505899008, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1319554948505899008\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/10/23 16:23:10 +08:00\",\"cap-corr-id\":\"1319554948505899008\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-10-23T16:23:10.5258597+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Create\",\"Object\":\"ReRoute\"}}', 0, '2020-10-23 16:23:11', '2020-10-24 16:23:11', 'Succeeded');
INSERT INTO `cap.published` VALUES (1319555067250839552, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1319555067250839552\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/10/23 16:23:38 +08:00\",\"cap-corr-id\":\"1319555067250839552\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-10-23T16:23:38.8355819+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Create\",\"Object\":\"ReRoute\"}}', 0, '2020-10-23 16:23:39', '2020-10-24 16:23:39', 'Succeeded');
INSERT INTO `cap.published` VALUES (1319555230837084160, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1319555230837084160\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/10/23 16:24:17 +08:00\",\"cap-corr-id\":\"1319555230837084160\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-10-23T16:24:17.8394311+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Create\",\"Object\":\"ReRoute\"}}', 0, '2020-10-23 16:24:18', '2020-10-24 16:24:18', 'Succeeded');
INSERT INTO `cap.published` VALUES (1319555333865967616, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1319555333865967616\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/10/23 16:24:42 +08:00\",\"cap-corr-id\":\"1319555333865967616\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-10-23T16:24:42.403288+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Create\",\"Object\":\"ReRoute\"}}', 0, '2020-10-23 16:24:42', '2020-10-24 16:24:42', 'Succeeded');
INSERT INTO `cap.published` VALUES (1319567388383744000, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1319567388383744000\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/10/23 17:12:36 +08:00\",\"cap-corr-id\":\"1319567388383744000\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-10-23T17:12:36.4191302+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Modify\",\"Object\":\"ReRoute\"}}', 0, '2020-10-23 17:12:36', '2020-10-24 17:12:36', 'Succeeded');
INSERT INTO `cap.published` VALUES (1319567469363171328, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1319567469363171328\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/10/23 17:12:55 +08:00\",\"cap-corr-id\":\"1319567469363171328\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-10-23T17:12:55.7317902+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Modify\",\"Object\":\"ReRoute\"}}', 0, '2020-10-23 17:12:56', '2020-10-24 17:12:56', 'Succeeded');
INSERT INTO `cap.published` VALUES (1322190029573971968, 'v1', 'LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData', '{\"Headers\":{\"cap-callback-name\":null,\"cap-msg-id\":\"1322190029573971968\",\"cap-msg-name\":\"LINGYUN.ApiGateway.EventBus.ApigatewayConfigChangeEventData\",\"cap-msg-type\":\"Object\",\"cap-senttime\":\"2020/10/30 22:54:02 +08:00\",\"cap-corr-id\":\"1322190029573971968\",\"cap-corr-seq\":\"0\"},\"Value\":{\"DateTime\":\"2020-10-30T22:54:02.8070185+08:00\",\"AppId\":\"TEST-APP\",\"Method\":\"Create\",\"Object\":\"ReRoute\"}}', 0, '2020-10-30 22:54:03', '2020-10-31 22:54:03', 'Succeeded');
-- ----------------------------
-- Table structure for cap.received

2
aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN.Abp.Account.Application.csproj

@ -14,7 +14,7 @@
<ItemGroup>
<ProjectReference Include="..\..\common\LINGYUN.Abp.Settings\LINGYUN.Abp.Settings.csproj" />
<ProjectReference Include="..\..\common\LINGYUN.Abp.WeChat.Authorization\LINGYUN.Abp.WeChat.Authorization.csproj" />
<ProjectReference Include="..\..\wechat\LINGYUN.Abp.WeChat.Authorization\LINGYUN.Abp.WeChat.Authorization.csproj" />
<ProjectReference Include="..\LINGYUN.Abp.Account.Application.Contracts\LINGYUN.Abp.Account.Application.Contracts.csproj" />
<ProjectReference Include="..\LINGYUN.Abp.Account.Domain\LINGYUN.Abp.Account.Domain.csproj" />
</ItemGroup>

15
aspnet-core/modules/common/LINGYUN.Abp.AspNetCore.SignalR.Protocol.Json/LINGYUN.Abp.AspNetCore.SignalR.Protocol.Json.csproj

@ -0,0 +1,15 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.SignalR.Protocols.NewtonsoftJson" Version="3.1.6" />
<PackageReference Include="Volo.Abp.AspNetCore.SignalR" Version="3.2.0" />
</ItemGroup>
</Project>

22
aspnet-core/modules/common/LINGYUN.Abp.AspNetCore.SignalR.Protocol.Json/LINGYUN/Abp/AspNetCore/SignalR/Protocol/Json/AbpAspNetCoreSignalRProtocolJsonModule.cs

@ -0,0 +1,22 @@
using Microsoft.AspNetCore.SignalR;
using Microsoft.AspNetCore.SignalR.Protocol;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions;
using Volo.Abp.AspNetCore.SignalR;
using Volo.Abp.Modularity;
namespace LINGYUN.Abp.AspNetCore.SignalR.Protocol.Json
{
[DependsOn(
typeof(AbpAspNetCoreSignalRModule))]
public class AbpAspNetCoreSignalRProtocolJsonModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
var newtonsoftJsonOptions = new NewtonsoftJsonHubProtocolOptions();
context.Services.ExecutePreConfiguredActions(newtonsoftJsonOptions);
context.Services.TryAddEnumerable(ServiceDescriptor.Singleton<IHubProtocol, NewtonsoftJsonHubProtocol>());
}
}
}

14
aspnet-core/modules/common/LINGYUN.Abp.AspNetCore.SignalR/LINGYUN.Abp.AspNetCore.SignalR.JwtToken.csproj

@ -0,0 +1,14 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.AspNetCore.SignalR" Version="3.2.0" />
</ItemGroup>
</Project>

25
aspnet-core/modules/common/LINGYUN.Abp.AspNetCore.SignalR/LINGYUN/Abp/AspNetCore/SignalR/JwtToken/AbpAspNetCoreSignalRJwtTokenMapPathOptions.cs

@ -0,0 +1,25 @@
using System.Collections.Generic;
namespace LINGYUN.Abp.AspNetCore.SignalR.JwtToken
{
public class AbpAspNetCoreSignalRJwtTokenMapPathOptions
{
public List<string> MapJwtTokenPaths { get; set; }
public AbpAspNetCoreSignalRJwtTokenMapPathOptions()
{
MapJwtTokenPaths = new List<string>();
}
public void MapPath(string path)
{
if (path.StartsWith("/signalr-hubs/"))
{
MapJwtTokenPaths.AddIfNotContains(path);
}
else
{
MapJwtTokenPaths.AddIfNotContains($"/signalr-hubs/{path}");
}
}
}
}

18
aspnet-core/modules/common/LINGYUN.Abp.AspNetCore.SignalR/LINGYUN/Abp/AspNetCore/SignalR/JwtToken/AbpAspNetCoreSignalRJwtTokenModule.cs

@ -0,0 +1,18 @@
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AspNetCore.SignalR;
using Volo.Abp.Modularity;
namespace LINGYUN.Abp.AspNetCore.SignalR.JwtToken
{
[DependsOn(
typeof(AbpAspNetCoreSignalRModule))]
public class AbpAspNetCoreSignalRJwtTokenModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
var configuration = context.Services.GetConfiguration();
Configure<AbpAspNetCoreSignalRJwtTokenMapPathOptions>(configuration.GetSection("SignalR:MapPath"));
}
}
}

0
aspnet-core/modules/common/LINGYUN.Abp.Notifications.SignalR/Microsoft/AspNetCore/Builder/SignalRJwtTokenApplicationBuilderExtensions.cs → aspnet-core/modules/common/LINGYUN.Abp.AspNetCore.SignalR/Microsoft/AspNetCore/Builder/SignalRJwtTokenApplicationBuilderExtensions.cs

45
aspnet-core/modules/common/LINGYUN.Abp.AspNetCore.SignalR/Microsoft/AspNetCore/Http/SignalRJwtTokenMiddleware.cs

@ -0,0 +1,45 @@
using LINGYUN.Abp.AspNetCore.SignalR.JwtToken;
using Microsoft.Extensions.Options;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
namespace Microsoft.AspNetCore.Http
{
public class SignalRJwtTokenMiddleware : IMiddleware, ITransientDependency
{
protected AbpAspNetCoreSignalRJwtTokenMapPathOptions Options { get; }
public SignalRJwtTokenMiddleware(IOptions<AbpAspNetCoreSignalRJwtTokenMapPathOptions> options)
{
Options = options.Value;
}
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{
if (Options.MapJwtTokenPaths.Any(path => context.Request.Path.StartsWithSegments(path)))
{
if (context.User.Identity?.IsAuthenticated != true)
{
if (context.Request.Query.TryGetValue("access_token", out var accessToken))
{
context.Request.Headers.Add("Authorization", $"Bearer {accessToken}");
}
}
}
//if (context.Request.Path.StartsWithSegments("/signalr-hubs/"))
//{
// if (context.User.Identity?.IsAuthenticated != true)
// {
// if (context.Request.Query.TryGetValue("access_token", out var accessToken))
// {
// context.Request.Headers.Add("Authorization", $"Bearer {accessToken}");
// }
// }
//}
await next(context);
}
}
}

15
aspnet-core/modules/common/LINGYUN.Abp.ExceptionHandling.Notifications/LINGYUN.Abp.ExceptionHandling.Notifications.csproj

@ -7,6 +7,21 @@
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<None Remove="LINGYUN\Abp\ExceptionHandling\Notifications\Localization\Resources\en.json" />
<None Remove="LINGYUN\Abp\ExceptionHandling\Notifications\Localization\Resources\zh-Hans.json" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="LINGYUN\Abp\ExceptionHandling\Notifications\Localization\Resources\en.json" />
<EmbeddedResource Include="LINGYUN\Abp\ExceptionHandling\Notifications\Localization\Resources\zh-Hans.json" />
</ItemGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Localization" Version="3.2.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LINGYUN.Abp.ExceptionHandling\LINGYUN.Abp.ExceptionHandling.csproj" />
<ProjectReference Include="..\LINGYUN.Abp.Notifications\LINGYUN.Abp.Notifications.csproj" />

22
aspnet-core/modules/common/LINGYUN.Abp.ExceptionHandling.Notifications/LINGYUN/Abp/ExceptionHandling/Notifications/AbpExceptionHandlingNotificationDefinitionProvider.cs

@ -1,4 +1,6 @@
using LINGYUN.Abp.Notifications;
using LINGYUN.Abp.ExceptionHandling.Localization;
using LINGYUN.Abp.Notifications;
using Volo.Abp.Localization;
namespace LINGYUN.Abp.ExceptionHandling.Notifications
{
@ -6,7 +8,23 @@ namespace LINGYUN.Abp.ExceptionHandling.Notifications
{
public override void Define(INotificationDefinitionContext context)
{
context.Add(new NotificationDefinition(AbpExceptionHandlingNotificationNames.NotificationName));
var exceptionGroup = context.AddGroup(
AbpExceptionHandlingNotificationNames.GroupName,
L("Notifications:Exception"),
false);
exceptionGroup.AddNotification(
name: AbpExceptionHandlingNotificationNames.NotificationName,
displayName: L("Notifications:ExceptionNotifier"),
description: L("Notifications:ExceptionNotifier"),
notificationType: NotificationType.System,
lifetime: NotificationLifetime.Persistent,
allowSubscriptionToClients: false);
}
protected LocalizableString L(string name)
{
return LocalizableString.Create<ExceptionHandlingResource>(name);
}
}
}

3
aspnet-core/modules/common/LINGYUN.Abp.ExceptionHandling.Notifications/LINGYUN/Abp/ExceptionHandling/Notifications/AbpExceptionHandlingNotificationNames.cs

@ -2,6 +2,7 @@
{
public class AbpExceptionHandlingNotificationNames
{
public const string NotificationName = "Abp.ExceptionHandling.Notifier";
public const string GroupName = "LINGYUN.Abp.ExceptionHandling";
public const string NotificationName = GroupName + ".Notifier";
}
}

19
aspnet-core/modules/common/LINGYUN.Abp.ExceptionHandling.Notifications/LINGYUN/Abp/ExceptionHandling/Notifications/AbpNotificationsExceptionHandlingModule.cs

@ -1,5 +1,8 @@
using LINGYUN.Abp.Notifications;
using LINGYUN.Abp.ExceptionHandling.Localization;
using LINGYUN.Abp.Notifications;
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
using Volo.Abp.VirtualFileSystem;
namespace LINGYUN.Abp.ExceptionHandling.Notifications
{
@ -8,5 +11,19 @@ namespace LINGYUN.Abp.ExceptionHandling.Notifications
typeof(AbpNotificationModule))]
public class AbpNotificationsExceptionHandlingModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpVirtualFileSystemOptions>(options =>
{
options.FileSets.AddEmbedded<AbpNotificationsExceptionHandlingModule>();
});
Configure<AbpLocalizationOptions>(options =>
{
options.Resources
.Get<ExceptionHandlingResource>()
.AddVirtualJson("/LINGYUN/Abp/ExceptionHandling/Notifications/Localization/Resources");
});
}
}
}

29
aspnet-core/modules/common/LINGYUN.Abp.ExceptionHandling.Notifications/LINGYUN/Abp/ExceptionHandling/Notifications/AbpNotificationsExceptionSubscriber.cs

@ -21,26 +21,23 @@ namespace LINGYUN.Abp.ExceptionHandling.Notifications
protected override async Task SendErrorNotifierAsync(ExceptionSendNotifierContext context)
{
var notificationDispatcher = context.ServiceProvider.GetRequiredService<INotificationDispatcher>();
var notificationName = NotificationNameNormalizer
.NormalizerName(AbpExceptionHandlingNotificationNames.NotificationName);
NotificationData notificationData;
if (CurrentTenant.IsAvailable)
{
notificationData = NotificationData.CreateTenantNotificationData(CurrentTenant.Id.Value);
}
else
{
notificationData = NotificationData.CreateNotificationData();
}
var notificationSender = context.ServiceProvider.GetRequiredService<INotificationSender>();
NotificationData notificationData = new NotificationData();
// 写入通知数据
//TODO:集成TextTemplate完成格式化的推送
notificationData.WriteStandardData(
context.Exception.GetType().FullName, context.Exception.Message,
DateTime.Now, "System");
context.Exception.GetType().FullName,
context.Exception.Message,
DateTime.Now,
"System");
await notificationDispatcher.DispatchAsync(notificationName, notificationData,
CurrentTenant.Id, NotificationSeverity.Error);
await notificationSender.SendNofiterAsync(
AbpExceptionHandlingNotificationNames.NotificationName,
notificationData,
null,
CurrentTenant.Id,
NotificationSeverity.Error);
}
}
}

7
aspnet-core/modules/common/LINGYUN.Abp.ExceptionHandling.Notifications/LINGYUN/Abp/ExceptionHandling/Notifications/Localization/Resources/en.json

@ -0,0 +1,7 @@
{
"culture": "en",
"texts": {
"Notifications:Exception": "Exception",
"Notifications:ExceptionNotifier": "Exception Notifier"
}
}

7
aspnet-core/modules/common/LINGYUN.Abp.ExceptionHandling.Notifications/LINGYUN/Abp/ExceptionHandling/Notifications/Localization/Resources/zh-Hans.json

@ -0,0 +1,7 @@
{
"culture": "zh-Hans",
"texts": {
"Notifications:Exception": "异常通知",
"Notifications:ExceptionNotifier": "异常推送"
}
}

2
aspnet-core/modules/common/LINGYUN.Abp.ExceptionHandling/LINGYUN.Abp.ExceptionHandling.csproj

@ -8,7 +8,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.Core" Version="3.2.0" />
<PackageReference Include="Volo.Abp.Localization" Version="3.2.0" />
</ItemGroup>
</Project>

12
aspnet-core/modules/common/LINGYUN.Abp.ExceptionHandling/LINGYUN/Abp/ExceptionHandling/AbpExceptionHandlingModule.cs

@ -1,8 +1,18 @@
using Volo.Abp.Modularity;
using LINGYUN.Abp.ExceptionHandling.Localization;
using Volo.Abp.Localization;
using Volo.Abp.Modularity;
namespace LINGYUN.Abp.ExceptionHandling
{
[DependsOn(typeof(AbpLocalizationModule))]
public class AbpExceptionHandlingModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpLocalizationOptions>(options =>
{
options.Resources.Add<ExceptionHandlingResource>("en");
});
}
}
}

9
aspnet-core/modules/common/LINGYUN.Abp.ExceptionHandling/LINGYUN/Abp/ExceptionHandling/Localization/ExceptionHandlingResource.cs

@ -0,0 +1,9 @@
using Volo.Abp.Localization;
namespace LINGYUN.Abp.ExceptionHandling.Localization
{
[LocalizationResourceName("AbpExceptionHandling")]
public class ExceptionHandlingResource
{
}
}

4
aspnet-core/modules/common/LINGYUN.Abp.IM.SignalR/LINGYUN.Abp.IM.SignalR.csproj

@ -9,11 +9,13 @@
<ItemGroup>
<PackageReference Include="Volo.Abp.AspNetCore.SignalR" Version="3.2.0" />
<PackageReference Include="Volo.Abp.Ddd.Application.Contracts" Version="3.2.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LINGYUN.Abp.AspNetCore.SignalR\LINGYUN.Abp.AspNetCore.SignalR.JwtToken.csproj" />
<ProjectReference Include="..\LINGYUN.Abp.IM\LINGYUN.Abp.IM.csproj" />
<ProjectReference Include="..\LINGYUN.Abp.RealTime\LINGYUN.Abp.RealTime.csproj" />
<ProjectReference Include="..\LINGYUN.Abp.RealTime.SignalR\LINGYUN.Abp.RealTime.SignalR.csproj" />
</ItemGroup>
</Project>

21
aspnet-core/modules/common/LINGYUN.Abp.IM.SignalR/LINGYUN/Abp/IM/SignalR/AbpIMSignalRModule.cs

@ -1,14 +1,27 @@
using LINGYUN.Abp.RealTime;
using Volo.Abp.AspNetCore.SignalR;
using LINGYUN.Abp.AspNetCore.SignalR.JwtToken;
using LINGYUN.Abp.IM.SignalR.Messages;
using LINGYUN.Abp.RealTime.SignalR;
using Volo.Abp.Modularity;
namespace LINGYUN.Abp.IM.SignalR
{
[DependsOn(
typeof(AbpRealTimeModule),
typeof(AbpAspNetCoreSignalRModule))]
typeof(AbpIMModule),
typeof(AbpRealTimeSignalRModule),
typeof(AbpAspNetCoreSignalRJwtTokenModule))]
public class AbpIMSignalRModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpIMOptions>(options =>
{
options.Providers.Add<SignalRMessageSenderProvider>();
});
Configure<AbpAspNetCoreSignalRJwtTokenMapPathOptions>(options =>
{
options.MapPath("messages");
});
}
}
}

94
aspnet-core/modules/common/LINGYUN.Abp.IM.SignalR/LINGYUN/Abp/IM/SignalR/Hubs/MessageHub.cs

@ -1,94 +0,0 @@
using LINGYUN.Abp.IM.Messages;
using LINGYUN.Abp.RealTime.Client;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.Logging;
using System;
using System.Threading.Tasks;
namespace LINGYUN.Abp.IM.SignalR.Hubs
{
[Authorize]
public class MessageHub : OnlineClientHubBase
{
private readonly IMessageStore _messageStore;
public MessageHub(
IMessageStore messageStore)
{
_messageStore = messageStore;
}
/// <summary>
/// 客户端调用发送消息方法
/// </summary>
/// <param name="chatMessage"></param>
/// <returns></returns>
[HubMethodName("SendMessage")]
public virtual async Task SendMessageAsync(ChatMessage chatMessage)
{
// 持久化
await _messageStore.StoreMessageAsync(chatMessage);
try
{
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 virtual async Task SendMessageToGroupAsync(ChatMessage chatMessage)
{
var signalRClient = Clients.Group(chatMessage.GroupId);
if (signalRClient == null)
{
Logger.LogDebug("Can not get group " + chatMessage.GroupId + " from SignalR hub!");
return;
}
await signalRClient.SendAsync("getChatMessage", chatMessage);
}
protected virtual async Task SendMessageToUserAsync(ChatMessage chatMessage)
{
var onlineClientContext = new OnlineClientContext(chatMessage.TenantId, chatMessage.ToUserId.GetValueOrDefault());
var onlineClients = OnlineClientManager.GetAllByContext(onlineClientContext);
// 需要捕捉每一个发送任务的异常吗?
// var onlineClientConnections = onlineClients.Select(c => c.ConnectionId).ToImmutableList();
// var signalRClient = Clients.Clients(onlineClientConnections);
// await signalRClient.SendAsync("getChatMessage", chatMessage);
foreach (var onlineClient in onlineClients)
{
try
{
var signalRClient = Clients.Client(onlineClient.ConnectionId);
if (signalRClient == null)
{
Logger.LogDebug("Can not get user " + onlineClientContext.UserId + " with connectionId " + onlineClient.ConnectionId + " from SignalR hub!");
continue;
}
await signalRClient.SendAsync("getChatMessage", chatMessage);
}
catch (Exception ex)
{
Logger.LogWarning("Could not send message to user: {0}", chatMessage.ToUserId);
Logger.LogWarning("Send to user message error: {0}", ex.Message);
}
}
}
}
}

122
aspnet-core/modules/common/LINGYUN.Abp.IM.SignalR/LINGYUN/Abp/IM/SignalR/Hubs/MessagesHub.cs

@ -0,0 +1,122 @@
using LINGYUN.Abp.IM.Contract;
using LINGYUN.Abp.IM.Group;
using LINGYUN.Abp.IM.Messages;
using LINGYUN.Abp.RealTime.Client;
using LINGYUN.Abp.RealTime.SignalR;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Immutable;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Users;
namespace LINGYUN.Abp.IM.SignalR.Hubs
{
[Authorize]
public class MessagesHub : OnlineClientHubBase
{
protected IFriendStore FriendStore { get; }
protected IMessageStore MessageStore { get; }
protected IUserGroupStore UserGroupStore { get; }
public MessagesHub(
IFriendStore friendStore,
IMessageStore messageStore,
IUserGroupStore userGroupStore)
{
FriendStore = friendStore;
MessageStore = messageStore;
UserGroupStore = userGroupStore;
}
protected override async Task OnClientConnectedAsync(IOnlineClient client)
{
await base.OnClientConnectedAsync(client);
// 加入通讯组
var userGroups = await UserGroupStore.GetUserGroupsAsync(client.TenantId, client.UserId.Value);
foreach (var group in userGroups)
{
await Groups.AddToGroupAsync(client.ConnectionId, group.Name);
var groupClient = Clients.Group(group.Name);
if (groupClient != null)
{
// 发送用户上线通知
await groupClient.SendAsync("onUserOnlined", client.TenantId, client.UserId.Value);
}
}
// 发送好友上线通知
var userFriends = await FriendStore.GetListAsync(client.TenantId, client.UserId.Value);
if (userFriends.Count > 0)
{
var friendClientIds = userFriends.Select(friend => friend.FriendId.ToString()).ToImmutableArray();
var userClients = Clients.Users(friendClientIds);
if (userClients != null)
{
await userClients.SendAsync("onUserOnlined", client.TenantId, client.UserId.Value);
}
}
}
/// <summary>
/// 客户端调用发送消息方法
/// </summary>
/// <param name="chatMessage"></param>
/// <returns></returns>
[HubMethodName("SendMessage")]
public virtual async Task SendMessageAsync(ChatMessage chatMessage)
{
// 持久化
await MessageStore.StoreMessageAsync(chatMessage, cancellationToken: Context.ConnectionAborted);
if (!chatMessage.GroupId.IsNullOrWhiteSpace())
{
await SendMessageToGroupAsync(chatMessage);
}
else
{
await SendMessageToUserAsync(chatMessage);
}
}
protected virtual async Task SendMessageToGroupAsync(ChatMessage chatMessage)
{
var signalRClient = Clients.Group(chatMessage.GroupId);
if (signalRClient == null)
{
Logger.LogDebug("Can not get group " + chatMessage.GroupId + " from SignalR hub!");
return;
}
await signalRClient.SendAsync("getChatMessage", chatMessage, cancellationToken: Context.ConnectionAborted);
}
protected virtual async Task SendMessageToUserAsync(ChatMessage chatMessage)
{
var onlineClientContext = new OnlineClientContext(chatMessage.TenantId, chatMessage.ToUserId.GetValueOrDefault());
var onlineClients = OnlineClientManager.GetAllByContext(onlineClientContext);
foreach (var onlineClient in onlineClients)
{
try
{
var signalRClient = Clients.Client(onlineClient.ConnectionId);
if (signalRClient == null)
{
Logger.LogDebug("Can not get user " + onlineClientContext.UserId + " with connectionId " + onlineClient.ConnectionId + " from SignalR hub!");
continue;
}
await signalRClient.SendAsync("getChatMessage", chatMessage, cancellationToken: Context.ConnectionAborted);
}
catch (Exception ex)
{
// 发送异常记录就行了,因为消息已经持久化
Logger.LogWarning("Could not send message to user: {0}", chatMessage.ToUserId);
Logger.LogWarning("Send to user message error: {0}", ex.Message);
}
}
}
}
}

101
aspnet-core/modules/common/LINGYUN.Abp.IM.SignalR/LINGYUN/Abp/IM/SignalR/Messages/SignalRMessageSender.cs

@ -1,101 +0,0 @@
using LINGYUN.Abp.IM.Messages;
using LINGYUN.Abp.IM.SignalR.Hubs;
using LINGYUN.Abp.RealTime.Client;
using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using System;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
namespace LINGYUN.Abp.IM.SignalR.Messages
{
public class SignalRMessageSender : IMessageSender, ITransientDependency
{
public ILogger<SignalRMessageSender> Logger { protected get; set; }
private readonly IOnlineClientManager _onlineClientManager;
private readonly IHubContext<MessageHub> _hubContext;
private readonly IMessageStore _messageStore;
public SignalRMessageSender(
IOnlineClientManager onlineClientManager,
IHubContext<MessageHub> hubContext,
IMessageStore messageStore)
{
_hubContext = hubContext;
_messageStore = messageStore;
_onlineClientManager = onlineClientManager;
Logger = NullLogger<SignalRMessageSender>.Instance;
}
/// <summary>
/// 服务端调用发送消息方法
/// </summary>
/// <param name="chatMessage"></param>
/// <returns></returns>
public async Task SendMessageAsync(ChatMessage chatMessage)
{
// 持久化
await _messageStore.StoreMessageAsync(chatMessage);
try
{
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 virtual async Task SendMessageToGroupAsync(ChatMessage chatMessage)
{
var signalRClient = _hubContext.Clients.Group(chatMessage.GroupId);
if (signalRClient == null)
{
Logger.LogDebug("Can not get group " + chatMessage.GroupId + " from SignalR hub!");
return;
}
await signalRClient.SendAsync("getChatMessage", chatMessage);
}
protected virtual async Task SendMessageToUserAsync(ChatMessage chatMessage)
{
var onlineClientContext = new OnlineClientContext(chatMessage.TenantId, chatMessage.ToUserId.Value);
var onlineClients = _onlineClientManager.GetAllByContext(onlineClientContext);
foreach (var onlineClient in onlineClients)
{
try
{
var signalRClient = _hubContext.Clients.Client(onlineClient.ConnectionId);
if (signalRClient == null)
{
Logger.LogDebug("Can not get user " + onlineClientContext.UserId + " with connectionId " + onlineClient.ConnectionId + " from SignalR hub!");
continue;
}
await signalRClient.SendAsync("getChatMessage", chatMessage);
}
catch (Exception ex)
{
Logger.LogWarning("Could not send message to user: {0}", chatMessage.ToUserId);
Logger.LogWarning("Send to user message error: {0}", ex.Message);
}
}
}
}
}

65
aspnet-core/modules/common/LINGYUN.Abp.IM.SignalR/LINGYUN/Abp/IM/SignalR/Messages/SignalRMessageSenderProvider.cs

@ -0,0 +1,65 @@
using LINGYUN.Abp.IM.Messages;
using LINGYUN.Abp.IM.SignalR.Hubs;
using LINGYUN.Abp.RealTime.Client;
using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Immutable;
using System.Linq;
using System.Threading.Tasks;
namespace LINGYUN.Abp.IM.SignalR.Messages
{
public class SignalRMessageSenderProvider : MessageSenderProviderBase
{
public override string Name => "SignalR";
private readonly IOnlineClientManager _onlineClientManager;
private readonly IHubContext<MessagesHub> _hubContext;
public SignalRMessageSenderProvider(
IOnlineClientManager onlineClientManager,
IHubContext<MessagesHub> hubContext,
IServiceProvider serviceProvider)
: base(serviceProvider)
{
_hubContext = hubContext;
_onlineClientManager = onlineClientManager;
}
protected override async Task SendMessageToGroupAsync(ChatMessage chatMessage)
{
var signalRClient = _hubContext.Clients.Group(chatMessage.GroupId);
if (signalRClient == null)
{
Logger.LogDebug("Can not get group " + chatMessage.GroupId + " from SignalR hub!");
return;
}
await signalRClient.SendAsync("getChatMessage", chatMessage);
}
protected override async Task SendMessageToUserAsync(ChatMessage chatMessage)
{
var onlineClientContext = new OnlineClientContext(chatMessage.TenantId, chatMessage.ToUserId.Value);
var onlineClients = _onlineClientManager.GetAllByContext(onlineClientContext);
try
{
var onlineClientConnectionIds = onlineClients.Select(client => client.ConnectionId).ToImmutableArray();
var signalRClients = _hubContext.Clients.Clients(onlineClientConnectionIds);
if (signalRClients == null)
{
Logger.LogDebug("Can not get user " + onlineClientContext.UserId + " connection from SignalR hub!");
return;
}
await signalRClients.SendAsync("getChatMessage", chatMessage);
}
catch (Exception ex)
{
Logger.LogWarning("Could not send message to user: {0}", chatMessage.ToUserId);
Logger.LogWarning("Send to user message error: {0}", ex.Message);
}
}
}
}

83
aspnet-core/modules/common/LINGYUN.Abp.IM.SignalR/LINGYUN/Abp/IM/SignalR/OnlineClientHubBase.cs

@ -1,83 +0,0 @@
using LINGYUN.Abp.IM.Group;
using LINGYUN.Abp.RealTime.Client;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using System;
using System.Threading.Tasks;
using Volo.Abp.AspNetCore.SignalR;
namespace LINGYUN.Abp.IM.SignalR
{
public abstract class OnlineClientHubBase : AbpHub
{
private IUserGroupStore _userGroupStore;
protected IUserGroupStore UserGroupStore => LazyGetRequiredService(ref _userGroupStore);
private IOnlineClientManager _onlineClientManager;
protected IOnlineClientManager OnlineClientManager => LazyGetRequiredService(ref _onlineClientManager);
private IHttpContextAccessor _httpContextAccessor;
protected IHttpContextAccessor HttpContextAccessor => LazyGetRequiredService(ref _httpContextAccessor);
public override async Task OnConnectedAsync()
{
await base.OnConnectedAsync();
IOnlineClient onlineClient = CreateClientForCurrentConnection();
Logger.LogDebug("A client is connected: " + onlineClient.ToString());
OnlineClientManager.Add(onlineClient);
// 加入通讯组
var userGroups = await UserGroupStore.GetUserGroupsAsync(onlineClient.TenantId, onlineClient.UserId.Value);
foreach(var group in userGroups)
{
await Groups.AddToGroupAsync(onlineClient.ConnectionId, group.Name);
}
}
public override async Task OnDisconnectedAsync(Exception exception)
{
await base.OnDisconnectedAsync(exception);
Logger.LogDebug("A client is disconnected: " + Context.ConnectionId);
try
{
// 从通讯组移除
var onlineClient = OnlineClientManager.GetByConnectionIdOrNull(Context.ConnectionId);
if(onlineClient != null)
{
var userGroups = await UserGroupStore.GetUserGroupsAsync(onlineClient.TenantId, onlineClient.UserId.Value);
foreach (var group in userGroups)
{
await Groups.RemoveFromGroupAsync(onlineClient.ConnectionId, group.Name);
}
// 移除在线客户端
OnlineClientManager.Remove(Context.ConnectionId);
}
}
catch (Exception ex)
{
Logger.LogWarning(ex.ToString(), ex);
}
}
protected virtual IOnlineClient CreateClientForCurrentConnection()
{
return new OnlineClient(Context.ConnectionId, GetClientIpAddress(),
CurrentTenant.Id, CurrentUser.Id)
{
ConnectTime = Clock.Now
};
}
protected virtual string GetClientIpAddress()
{
try
{
return HttpContextAccessor.HttpContext?.Connection?.RemoteIpAddress?.ToString();
}
catch (Exception ex)
{
Logger.LogException(ex, LogLevel.Warning);
return null;
}
}
}
}

1
aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN.Abp.IM.csproj

@ -9,6 +9,7 @@
<ItemGroup>
<PackageReference Include="Volo.Abp.Auditing" Version="3.2.0" />
<PackageReference Include="Volo.Abp.EventBus" Version="3.2.0" />
</ItemGroup>
</Project>

10
aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/AbpIMModule.cs

@ -0,0 +1,10 @@
using Volo.Abp.EventBus;
using Volo.Abp.Modularity;
namespace LINGYUN.Abp.IM
{
[DependsOn(typeof(AbpEventBusModule))]
public class AbpIMModule : AbpModule
{
}
}

15
aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/AbpIMOptions.cs

@ -0,0 +1,15 @@
using LINGYUN.Abp.IM.Messages;
using Volo.Abp.Collections;
namespace LINGYUN.Abp.IM
{
public class AbpIMOptions
{
public ITypeList<IMessageSenderProvider> Providers { get; }
public AbpIMOptions()
{
Providers = new TypeList<IMessageSenderProvider>();
}
}
}

161
aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Contract/IFriendStore.cs

@ -0,0 +1,161 @@
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
namespace LINGYUN.Abp.IM.Contract
{
public interface IFriendStore
{
/// <summary>
/// 是否是好友关系
/// </summary>
/// <param name="tenantId"></param>
/// <param name="userId"></param>
/// <param name="friendId"></param>
/// <returns></returns>
Task<bool> IsFriendAsync(
Guid? tenantId,
Guid userId,
Guid friendId,
CancellationToken cancellationToken = default
);
/// <summary>
/// 查询好友列表
/// </summary>
/// <param name="tenantId"></param>
/// <param name="userId"></param>
/// <param name="sorting"></param>
/// <param name="reverse"></param>
/// <returns></returns>
Task<List<UserFriend>> GetListAsync(
Guid? tenantId,
Guid userId,
string sorting = nameof(UserFriend.UserId),
bool reverse = false,
CancellationToken cancellationToken = default
);
/// <summary>
/// 获取好友数量
/// </summary>
/// <param name="tenantId"></param>
/// <param name="userId"></param>
/// <param name="filter"></param>
/// <returns></returns>
Task<int> GetCountAsync(
Guid? tenantId,
Guid userId,
string filter = "",
CancellationToken cancellationToken = default);
/// <summary>
/// 获取好友列表
/// </summary>
/// <param name="tenantId"></param>
/// <param name="userId"></param>
/// <param name="filter"></param>
/// <param name="sorting"></param>
/// <param name="reverse"></param>
/// <param name="skipCount"></param>
/// <param name="maxResultCount"></param>
/// <returns></returns>
Task<List<UserFriend>> GetPagedListAsync(
Guid? tenantId,
Guid userId,
string filter = "",
string sorting = nameof(UserFriend.UserId),
bool reverse = false,
int skipCount = 0,
int maxResultCount = 10,
CancellationToken cancellationToken = default);
/// <summary>
/// 获取最近联系好友列表
/// </summary>
/// <param name="tenantId"></param>
/// <param name="userId"></param>
/// <param name="skipCount"></param>
/// <param name="maxResultCount"></param>
/// <returns></returns>
Task<List<UserFriend>> GetLastContactListAsync(
Guid? tenantId,
Guid userId,
int skipCount = 0,
int maxResultCount = 10,
CancellationToken cancellationToken = default);
/// <summary>
/// 获取好友信息
/// </summary>
/// <param name="tenantId"></param>
/// <param name="userId"></param>
/// <param name="friendId"></param>
/// <returns></returns>
Task<UserFriend> GetMemberAsync(
Guid? tenantId,
Guid userId,
Guid friendId,
CancellationToken cancellationToken = default);
/// <summary>
/// 添加好友
/// </summary>
/// <param name="tenantId"></param>
/// <param name="userId"></param>
/// <param name="friendId"></param>
/// <returns></returns>
Task AddMemberAsync(
Guid? tenantId,
Guid userId,
Guid friendId,
string remarkName = "",
CancellationToken cancellationToken = default);
/// <summary>
/// 添加好友请求
/// </summary>
/// <param name="tenantId"></param>
/// <param name="userId"></param>
/// <param name="friendId"></param>
/// <param name="remarkName"></param>
/// <returns></returns>
Task<UserAddFriendResult> AddRequestAsync(
Guid? tenantId,
Guid userId,
Guid friendId,
string remarkName = "",
string description = "",
CancellationToken cancellationToken = default);
/// <summary>
/// 移除好友
/// </summary>
/// <param name="tenantId"></param>
/// <param name="userId"></param>
/// <param name="friendId"></param>
/// <returns></returns>
Task RemoveMemberAsync(
Guid? tenantId,
Guid userId,
Guid friendId,
CancellationToken cancellationToken = default);
/// <summary>
/// 添加黑名单
/// </summary>
/// <param name="tenantId"></param>
/// <param name="userId"></param>
/// <param name="friendId"></param>
/// <returns></returns>
Task AddShieldMemberAsync(
Guid? tenantId,
Guid userId,
Guid friendId,
CancellationToken cancellationToken = default);
/// <summary>
/// 移除黑名单
/// </summary>
/// <param name="tenantId"></param>
/// <param name="userId"></param>
/// <param name="friendId"></param>
/// <returns></returns>
Task RemoveShieldMemberAsync(
Guid? tenantId,
Guid userId,
Guid friendId,
CancellationToken cancellationToken = default);
}
}

12
aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Contract/UserAddFriendResult.cs

@ -0,0 +1,12 @@
namespace LINGYUN.Abp.IM.Contract
{
public class UserAddFriendResult
{
public bool Successed => Status == UserFriendStatus.Added;
public UserFriendStatus Status { get; }
public UserAddFriendResult(UserFriendStatus status)
{
Status = status;
}
}
}

46
aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Contract/UserFriend.cs

@ -0,0 +1,46 @@
using System;
namespace LINGYUN.Abp.IM.Contract
{
public class UserFriend : UserCard
{
/// <summary>
/// 好友标识
/// </summary>
public Guid FriendId { get; set; }
/// <summary>
/// 已添加黑名单
/// </summary>
public bool Black { get; set; }
/// <summary>
/// 特别关注
/// </summary>
public bool SpecialFocus { get; set; }
/// <summary>
/// 消息免打扰
/// </summary>
public bool DontDisturb { get; set; }
/// <summary>
/// 备注名称
/// </summary>
public string RemarkName { get; set; }
public override int GetHashCode()
{
return FriendId.GetHashCode();
}
public override bool Equals(object obj)
{
if (obj == null)
{
return false;
}
if (obj is UserFriend friend)
{
return friend.FriendId.Equals(FriendId);
}
return false;
}
}
}

17
aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Contract/UserFriendGroup.cs

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
namespace LINGYUN.Abp.IM.Contract
{
public class UserFriendGroup
{
public Guid? TenantId { get; set; }
public string DisplayName { get; set; }
public List<UserFriend> UserFriends { get; set; } = new List<UserFriend>();
public void AddFriend(UserFriend friend)
{
UserFriends.AddIfNotContains(friend);
}
}
}

14
aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Contract/UserFriendStatus.cs

@ -0,0 +1,14 @@
namespace LINGYUN.Abp.IM.Contract
{
public enum UserFriendStatus : byte
{
/// <summary>
/// 需要验证
/// </summary>
NeedValidation,
/// <summary>
/// 已添加
/// </summary>
Added
}
}

12
aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Group/GroupUserCard.cs

@ -1,22 +1,12 @@
using System.Collections.Generic;
using System.Linq;
namespace LINGYUN.Abp.IM.Group
namespace LINGYUN.Abp.IM.Group
{
public class GroupUserCard : UserCard
{
public long GroupId { get; set; }
public bool IsAdmin { get; set; }
public bool IsSuperAdmin { get; set; }
public IDictionary<string, bool> Permissions { get; set; }
public GroupUserCard()
{
Permissions = new Dictionary<string, bool>();
}
public bool IsGrant(string key)
{
return Permissions.Any(x => x.Equals(key) && x.Value);
}
}
}

61
aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Group/IUserGroupStore.cs

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
namespace LINGYUN.Abp.IM.Group
@ -7,35 +8,59 @@ namespace LINGYUN.Abp.IM.Group
public interface IUserGroupStore
{
/// <summary>
/// 成员是否在群组
/// </summary>
/// <param name="tenantId"></param>
/// <param name="groupId"></param>
/// <param name="userId"></param>
/// <returns></returns>
Task<bool> MemberHasInGroupAsync(
Guid? tenantId,
long groupId,
Guid userId,
CancellationToken cancellationToken = default);
/// <summary>
/// 获取群组用户身份
/// </summary>
/// <param name="tenantId"></param>
/// <param name="groupId"></param>
/// <param name="userId"></param>
/// <returns></returns>
Task<GroupUserCard> GetUserGroupCardAsync(Guid? tenantId, long groupId, Guid userId);
Task<GroupUserCard> GetUserGroupCardAsync(
Guid? tenantId,
long groupId,
Guid userId,
CancellationToken cancellationToken = default);
/// <summary>
/// 获取用户所在通讯组列表
/// </summary>
/// <param name="tenantId"></param>
/// <param name="userId"></param>
/// <returns></returns>
Task<IEnumerable<Group>> GetUserGroupsAsync(Guid? tenantId, Guid userId);
Task<IEnumerable<Group>> GetUserGroupsAsync(
Guid? tenantId,
Guid userId,
CancellationToken cancellationToken = default);
/// <summary>
/// 获取通讯组所有用户
/// 获取群组成员列表
/// </summary>
/// <param name="tenantId"></param>
/// <param name="groupId"></param>
/// <returns></returns>
Task<IEnumerable<UserGroup>> GetGroupUsersAsync(Guid? tenantId, long groupId);
Task<IEnumerable<GroupUserCard>> GetMembersAsync(
Guid? tenantId,
long groupId,
CancellationToken cancellationToken = default);
/// <summary>
/// 获取通讯组用户数
/// 获取群组成员
/// </summary>
/// <param name="tenantId"></param>
/// <param name="groupId"></param>
/// <param name="filter"></param>
/// <returns></returns>
Task<int> GetGroupUsersCountAsync(Guid? tenantId, long groupId, string filter = "");
Task<int> GetMembersCountAsync(
Guid? tenantId,
long groupId,
CancellationToken cancellationToken = default);
/// <summary>
/// 获取通讯组用户
/// </summary>
@ -46,7 +71,14 @@ namespace LINGYUN.Abp.IM.Group
/// <param name="skipCount"></param>
/// <param name="maxResultCount"></param>
/// <returns></returns>
Task<List<UserGroup>> GetGroupUsersAsync(Guid? tenantId, long groupId, string filter = "", string sorting = nameof(UserGroup.UserId), int skipCount = 1, int maxResultCount = 10);
Task<List<GroupUserCard>> GetMembersAsync(
Guid? tenantId,
long groupId,
string sorting = nameof(GroupUserCard.UserId),
bool reverse = false,
int skipCount = 0,
int maxResultCount = 10,
CancellationToken cancellationToken = default);
/// <summary>
/// 用户加入通讯组
/// </summary>
@ -54,7 +86,12 @@ namespace LINGYUN.Abp.IM.Group
/// <param name="userId"></param>
/// <param name="groupId"></param>
/// <returns></returns>
Task AddUserToGroupAsync(Guid? tenantId, Guid userId, long groupId, Guid acceptUserId);
Task AddUserToGroupAsync(
Guid? tenantId,
Guid userId,
long groupId,
Guid acceptUserId,
CancellationToken cancellationToken = default);
/// <summary>
/// 用户退出通讯组
/// </summary>
@ -62,6 +99,10 @@ namespace LINGYUN.Abp.IM.Group
/// <param name="userId"></param>
/// <param name="groupId"></param>
/// <returns></returns>
Task RemoveUserFormGroupAsync(Guid? tenantId, Guid userId, long groupId);
Task RemoveUserFormGroupAsync(
Guid? tenantId,
Guid userId,
long groupId,
CancellationToken cancellationToken = default);
}
}

60
aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/IUserCardFinder.cs

@ -0,0 +1,60 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace LINGYUN.Abp.IM
{
/// <summary>
/// IM用户资料查找接口
/// </summary>
public interface IUserCardFinder
{
/// <summary>
/// 查询IM用户数量
/// </summary>
/// <param name="tenantId"></param>
/// <param name="findUserName">用户名称</param>
/// <param name="startAge">起止年龄</param>
/// <param name="endAge">起止年龄</param>
/// <param name="sex">性别</param>
/// <returns></returns>
Task<int> GetCountAsync(
Guid? tenantId,
string findUserName = "",
int? startAge = null,
int? endAge = null,
Sex? sex = null);
/// <summary>
/// 查询IM用户列表
/// </summary>
/// <param name="tenantId"></param>
/// <param name="findUserName">用户名称</param>
/// <param name="startAge">起止年龄</param>
/// <param name="endAge">起止年龄</param>
/// <param name="sex">性别</param>
/// <param name="sorting">排序字段</param>
/// <param name="reverse">是否倒序</param>
/// <param name="skipCount">起始记录位置</param>
/// <param name="maxResultCount">最大返回数量</param>
/// <returns></returns>
Task<List<UserCard>> GetListAsync(
Guid? tenantId,
string findUserName = "",
int? startAge = null,
int? endAge = null,
Sex? sex = null,
string sorting = nameof(UserCard.UserId),
bool reverse = false,
int skipCount = 0,
int maxResultCount = 10);
/// <summary>
/// 获取IM用户信息
/// </summary>
/// <param name="tenantId"></param>
/// <param name="findUserId"></param>
/// <returns></returns>
Task<UserCard> GetMemberAsync(
Guid? tenantId,
Guid findUserId);
}
}

70
aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/ChatMessage.cs

@ -1,29 +1,79 @@
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using Volo.Abp.Auditing;
using Volo.Abp.ObjectExtending;
namespace LINGYUN.Abp.IM.Messages
{
public class ChatMessage
public class ChatMessage : ExtensibleObject
{
/// <summary>
/// 租户
/// </summary>
public Guid? TenantId { get; set; }
/// <summary>
/// 群组标识
/// </summary>
public string GroupId { get; set; }
/// <summary>
/// 消息标识
/// </summary>
/// <remarks>
/// 调用者无需关注此字段,将由服务自动生成
/// </remarks>
public string MessageId { get; set; }
/// <summary>
/// 发送者标识
/// </summary>
public Guid FormUserId { get; set; }
/// <summary>
/// 发送者名称
/// </summary>
public string FormUserName { get; set; }
/// <summary>
/// 接收用户标识
/// </summary>
/// <remarks>
/// 设计为可空是为了兼容群聊消息
/// /remarks>
public Guid? ToUserId { get; set; }
/// <summary>
/// 消息内容
/// </summary>
[DisableAuditing]
public string Content { get; set; }
/// <summary>
/// 发送时间
/// </summary>
public DateTime SendTime { get; set; }
/// <summary>
/// 是否匿名发送(存储在扩展字段)
/// </summary>
public bool IsAnonymous { get; set; }
/// <summary>
/// 消息类型
/// </summary>
public MessageType MessageType { get; set; } = MessageType.Text;
public bool IsAnonymous { get; set; } = false;
public override IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
var results = ExtensibleObjectValidator.GetValidationErrors(this, validationContext);
public MessageType MessageType { get; set; } = MessageType.Text;
foreach (var result in ValidateReceiver(validationContext))
{
results.Add(result);
}
return results;
}
protected virtual IEnumerable<ValidationResult> ValidateReceiver(ValidationContext validationContext)
{
if (GroupId.IsNullOrWhiteSpace() && !ToUserId.HasValue)
{
yield return new ValidationResult("");
}
}
}
}

10
aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/IMessageSenderProvider.cs

@ -0,0 +1,10 @@
using System.Threading.Tasks;
namespace LINGYUN.Abp.IM.Messages
{
public interface IMessageSenderProvider
{
string Name { get; }
Task SendMessageAsync(ChatMessage chatMessage);
}
}

9
aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/IMessageSenderProviderManager.cs

@ -0,0 +1,9 @@
using System.Collections.Generic;
namespace LINGYUN.Abp.IM.Messages
{
public interface IMessageSenderProviderManager
{
List<IMessageSenderProvider> Providers { get; }
}
}

67
aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/IMessageStore.cs

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
namespace LINGYUN.Abp.IM.Messages
@ -13,7 +14,9 @@ namespace LINGYUN.Abp.IM.Messages
/// <param name="formUserId"></param>
/// <param name="toUserId"></param>
/// <returns></returns>
Task StoreMessageAsync(ChatMessage chatMessage);
Task StoreMessageAsync(
ChatMessage chatMessage,
CancellationToken cancellationToken = default);
/// <summary>
/// 获取群组聊天记录总数
/// </summary>
@ -22,15 +25,51 @@ namespace LINGYUN.Abp.IM.Messages
/// <param name="filter"></param>
/// <param name="type"></param>
/// <returns></returns>
Task<long> GetGroupMessageCountAsync(Guid? tenantId, long groupId, string filter = "", MessageType? type = null);
Task<long> GetGroupMessageCountAsync(
Guid? tenantId,
long groupId,
string filter = "",
MessageType? type = null,
CancellationToken cancellationToken = default);
/// <summary>
/// 获取群组聊天记录
/// </summary>
/// <param name="tenantId"></param>
/// <param name="groupName"></param>
/// <param name="groupId"></param>
/// <param name="filter"></param>
/// <param name="sorting"></param>
/// <param name="reverse"></param>
/// <param name="type"></param>
/// <param name="skipCount"></param>
/// <param name="maxResultCount"></param>
/// <returns></returns>
Task<List<ChatMessage>> GetGroupMessageAsync(
Guid? tenantId,
long groupId,
string filter = "",
string sorting = nameof(ChatMessage.MessageId),
bool reverse = true,
MessageType? type = null,
int skipCount = 0,
int maxResultCount = 10,
CancellationToken cancellationToken = default);
/// <summary>
/// 获取上一次通讯消息记录
/// </summary>
/// <param name="tenantId"></param>
/// <param name="userId"></param>
/// <param name="sorting"></param>
/// <param name="reverse"></param>
/// <param name="maxResultCount"></param>
/// <returns></returns>
Task<List<ChatMessage>> GetGroupMessageAsync(Guid? tenantId, long groupId, string filter = "", string sorting = nameof(ChatMessage.MessageId), MessageType? type = null, int skipCount = 1, int maxResultCount = 10);
Task<List<LastChatMessage>> GetLastChatMessagesAsync(
Guid? tenantId,
Guid userId,
string sorting = nameof(LastChatMessage.SendTime),
bool reverse = true,
int maxResultCount = 10,
CancellationToken cancellationToken = default
);
/// <summary>
/// 获取与某个用户的聊天记录总数
/// </summary>
@ -40,7 +79,13 @@ namespace LINGYUN.Abp.IM.Messages
/// <param name="filter"></param>
/// <param name="type"></param>
/// <returns></returns>
Task<long> GetChatMessageCountAsync(Guid? tenantId, Guid sendUserId, Guid receiveUserId, string filter = "", MessageType? type = null);
Task<long> GetChatMessageCountAsync(
Guid? tenantId,
Guid sendUserId,
Guid receiveUserId,
string filter = "",
MessageType? type = null,
CancellationToken cancellationToken = default);
/// <summary>
/// 获取与某个用户的聊天记录
/// </summary>
@ -48,6 +93,16 @@ namespace LINGYUN.Abp.IM.Messages
/// <param name="userId"></param>
/// <param name="maxResultCount"></param>
/// <returns></returns>
Task<List<ChatMessage>> GetChatMessageAsync(Guid? tenantId, Guid sendUserId, Guid receiveUserId, string filter = "", string sorting = nameof(ChatMessage.MessageId), MessageType? type = null, int skipCount = 1, int maxResultCount = 10);
Task<List<ChatMessage>> GetChatMessageAsync(
Guid? tenantId,
Guid sendUserId,
Guid receiveUserId,
string filter = "",
string sorting = nameof(ChatMessage.MessageId),
bool reverse = true,
MessageType? type = null,
int skipCount = 0,
int maxResultCount = 10,
CancellationToken cancellationToken = default);
}
}

9
aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/LastChatMessage.cs

@ -0,0 +1,9 @@
namespace LINGYUN.Abp.IM.Messages
{
/// <summary>
/// 上一次通讯消息
/// </summary>
public class LastChatMessage : ChatMessage
{
}
}

26
aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/MessageSender.cs

@ -0,0 +1,26 @@
using System.Threading.Tasks;
using Volo.Abp.Data;
using Volo.Abp.DependencyInjection;
using Volo.Abp.EventBus.Distributed;
namespace LINGYUN.Abp.IM.Messages
{
public class MessageSender : IMessageSender, ITransientDependency
{
protected IDistributedEventBus EventBus { get; }
public MessageSender(IDistributedEventBus eventBus)
{
EventBus = eventBus;
}
public virtual async Task SendMessageAsync(ChatMessage chatMessage)
{
chatMessage.SetProperty(nameof(ChatMessage.IsAnonymous), chatMessage.IsAnonymous);
// 如果先存储的话,就紧耦合消息处理模块了
// await Store.StoreMessageAsync(chatMessage);
await EventBus.PublishAsync(chatMessage);
}
}
}

70
aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/MessageSenderProviderBase.cs

@ -0,0 +1,70 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using System;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
namespace LINGYUN.Abp.IM.Messages
{
public abstract class MessageSenderProviderBase : IMessageSenderProvider, ITransientDependency
{
public abstract string Name { get; }
protected IServiceProvider ServiceProvider { get; }
protected readonly object ServiceProviderLock = new object();
public ILoggerFactory LoggerFactory => LazyGetRequiredService(ref _loggerFactory);
private ILoggerFactory _loggerFactory;
protected ILogger Logger => _lazyLogger.Value;
private Lazy<ILogger> _lazyLogger => new Lazy<ILogger>(() => LoggerFactory?.CreateLogger(GetType().FullName) ?? NullLogger.Instance, true);
protected TService LazyGetRequiredService<TService>(ref TService reference)
{
if (reference == null)
{
lock (ServiceProviderLock)
{
if (reference == null)
{
reference = ServiceProvider.GetRequiredService<TService>();
}
}
}
return reference;
}
protected MessageSenderProviderBase(IServiceProvider serviceProvider)
{
ServiceProvider = serviceProvider;
}
public virtual async Task SendMessageAsync(ChatMessage chatMessage)
{
try
{
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);
}
}

33
aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/MessageSenderProviderManager.cs

@ -0,0 +1,33 @@
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.Linq;
using Volo.Abp.DependencyInjection;
namespace LINGYUN.Abp.IM.Messages
{
public class MessageSenderProviderManager : IMessageSenderProviderManager, ISingletonDependency
{
public List<IMessageSenderProvider> Providers => _lazyProviders.Value;
protected AbpIMOptions Options { get; }
private readonly Lazy<List<IMessageSenderProvider>> _lazyProviders;
public MessageSenderProviderManager(
IServiceProvider serviceProvider,
IOptions<AbpIMOptions> options)
{
Options = options.Value;
_lazyProviders = new Lazy<List<IMessageSenderProvider>>(
() => Options
.Providers
.Select(type => serviceProvider.GetRequiredService(type) as IMessageSenderProvider)
.ToList(),
true
);
}
}
}

22
aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Messages/MessageType.cs

@ -2,9 +2,29 @@
{
public enum MessageType
{
/// <summary>
/// 文本消息
/// </summary>
Text = 0,
/// <summary>
/// 图片消息
/// </summary>
Image = 10,
/// <summary>
/// 链接
/// </summary>
Link = 20,
Video = 30
/// <summary>
/// 视频
/// </summary>
Video = 30,
/// <summary>
/// 音频
/// </summary>
Voice = 40,
/// <summary>
/// 文件
/// </summary>
File = 50
}
}

9
aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/Sex.cs

@ -0,0 +1,9 @@
namespace LINGYUN.Abp.IM
{
public enum Sex
{
Male,
Female,
Other
}
}

25
aspnet-core/modules/common/LINGYUN.Abp.IM/LINGYUN/Abp/IM/UserCard.cs

@ -5,15 +5,16 @@ namespace LINGYUN.Abp.IM
public class UserCard
{
public Guid? TenantId { get; set; }
public Guid UserId { get; set; }
#region 下一个版本细粒度的用户资料 与Identity集成
#region 细粒度的用户资料
public string UserName { get; set; }
/// <summary>
/// 头像
/// </summary>
public string AvatarlUrl { get; set; }
public string AvatarUrl { get; set; }
/// <summary>
/// 昵称
/// </summary>
@ -21,27 +22,23 @@ namespace LINGYUN.Abp.IM
/// <summary>
/// 年龄
/// </summary>
public int Arg { get; set; }
public int Age { get; set; }
/// <summary>
/// 性别
/// </summary>
public string Sex { get; set; }
/// <summary>
/// 国家
/// </summary>
public string Countriy { get; set; }
public Sex Sex { get; set; }
/// <summary>
/// 省份
/// 签名
/// </summary>
public string Province { get; set; }
public string Sign { get; set; }
/// <summary>
/// 城市
/// 说明
/// </summary>
public string City { get; set; }
public string Description { get; set; }
/// <summary>
/// 签名
/// 生日
/// </summary>
public string Sign { get; set; }
public DateTime? Birthday { get; set; }
#endregion
}

3
aspnet-core/modules/common/LINGYUN.Abp.Notifications.SignalR/LINGYUN.Abp.Notifications.SignalR.csproj

@ -13,8 +13,9 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LINGYUN.Abp.AspNetCore.SignalR\LINGYUN.Abp.AspNetCore.SignalR.JwtToken.csproj" />
<ProjectReference Include="..\LINGYUN.Abp.Notifications\LINGYUN.Abp.Notifications.csproj" />
<ProjectReference Include="..\LINGYUN.Abp.RealTime\LINGYUN.Abp.RealTime.csproj" />
<ProjectReference Include="..\LINGYUN.Abp.RealTime.SignalR\LINGYUN.Abp.RealTime.SignalR.csproj" />
</ItemGroup>
</Project>

13
aspnet-core/modules/common/LINGYUN.Abp.Notifications.SignalR/LINGYUN/Abp/Notifications/SignalR/AbpNotificationsSignalRModule.cs

@ -1,13 +1,15 @@
using LINGYUN.Abp.RealTime;
using LINGYUN.Abp.AspNetCore.SignalR.JwtToken;
using LINGYUN.Abp.RealTime.SignalR;
using Volo.Abp.AspNetCore.SignalR;
using Volo.Abp.Modularity;
namespace LINGYUN.Abp.Notifications.SignalR
{
[DependsOn(
typeof(AbpRealTimeModule),
typeof(AbpRealTimeSignalRModule),
typeof(AbpNotificationModule),
typeof(AbpAspNetCoreSignalRModule))]
typeof(AbpAspNetCoreSignalRModule),
typeof(AbpAspNetCoreSignalRJwtTokenModule))]
public class AbpNotificationsSignalRModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
@ -16,6 +18,11 @@ namespace LINGYUN.Abp.Notifications.SignalR
{
options.PublishProviders.Add<SignalRNotificationPublishProvider>();
});
Configure<AbpAspNetCoreSignalRJwtTokenMapPathOptions>(options =>
{
options.MapPath("notifications");
});
}
}
}

61
aspnet-core/modules/common/LINGYUN.Abp.Notifications.SignalR/LINGYUN/Abp/Notifications/SignalR/Hubs/NotificationsHub.cs

@ -1,7 +1,10 @@
using Microsoft.AspNetCore.Authorization;
using LINGYUN.Abp.RealTime.Client;
using LINGYUN.Abp.RealTime.SignalR;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.SignalR;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Uow;
using Volo.Abp.Users;
namespace LINGYUN.Abp.Notifications.SignalR.Hubs
@ -12,11 +15,51 @@ namespace LINGYUN.Abp.Notifications.SignalR.Hubs
private INotificationStore _notificationStore;
protected INotificationStore NotificationStore => LazyGetRequiredService(ref _notificationStore);
protected override async Task OnClientConnectedAsync(IOnlineClient client)
{
await base.OnClientConnectedAsync(client);
if (client.TenantId.HasValue)
{
// 以租户为分组,将用户加入租户通讯组
await Groups.AddToGroupAsync(client.ConnectionId, client.TenantId.Value.ToString(), Context.ConnectionAborted);
}
else
{
await Groups.AddToGroupAsync(client.ConnectionId, "Global", Context.ConnectionAborted);
}
}
protected override async Task OnClientDisconnectedAsync(IOnlineClient client)
{
await base.OnClientDisconnectedAsync(client);
if (client.TenantId.HasValue)
{
// 以租户为分组,将移除租户通讯组
await Groups.RemoveFromGroupAsync(client.ConnectionId, client.TenantId.Value.ToString(), Context.ConnectionAborted);
}
else
{
await Groups.RemoveFromGroupAsync(client.ConnectionId, "Global", Context.ConnectionAborted);
}
}
[HubMethodName("MySubscriptions")]
public virtual async Task<ListResultDto<NotificationSubscriptionInfo>> GetMySubscriptionsAsync()
{
var subscriptions = await NotificationStore
.GetUserSubscriptionsAsync(CurrentTenant.Id, CurrentUser.GetId());
return new ListResultDto<NotificationSubscriptionInfo>(subscriptions);
}
[UnitOfWork]
[HubMethodName("GetNotification")]
public virtual async Task<ListResultDto<NotificationInfo>> GetNotificationAsync(
NotificationReadState readState = NotificationReadState.UnRead, int maxResultCount = 10)
public virtual async Task<ListResultDto<NotificationInfo>> GetNotificationAsync()
{
var userNotifications = await NotificationStore.GetUserNotificationsAsync(CurrentTenant.Id, CurrentUser.GetId(), readState, maxResultCount);
var userNotifications = await NotificationStore
.GetUserNotificationsAsync(CurrentTenant.Id, CurrentUser.GetId(), NotificationReadState.UnRead, 10);
return new ListResultDto<NotificationInfo>(userNotifications);
}
@ -24,9 +67,13 @@ namespace LINGYUN.Abp.Notifications.SignalR.Hubs
[HubMethodName("ChangeState")]
public virtual async Task ChangeStateAsync(string id, NotificationReadState readState = NotificationReadState.Read)
{
await NotificationStore.ChangeUserNotificationReadStateAsync(CurrentTenant.Id, CurrentUser.GetId(), long.Parse(id), readState);
await NotificationStore
.ChangeUserNotificationReadStateAsync(
CurrentTenant.Id,
CurrentUser.GetId(),
long.Parse(id),
readState,
Context.ConnectionAborted);
}
}
}

82
aspnet-core/modules/common/LINGYUN.Abp.Notifications.SignalR/LINGYUN/Abp/Notifications/SignalR/OnlineClientHubBase.cs

@ -1,82 +0,0 @@
using LINGYUN.Abp.RealTime.Client;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.Logging;
using System;
using System.Threading.Tasks;
using Volo.Abp.AspNetCore.SignalR;
using Volo.Abp.Security.Claims;
namespace LINGYUN.Abp.Notifications.SignalR
{
public abstract class OnlineClientHubBase : AbpHub
{
private ICurrentPrincipalAccessor _currentPrincipalAccessor;
protected ICurrentPrincipalAccessor CurrentPrincipalAccessor => LazyGetRequiredService(ref _currentPrincipalAccessor);
private IOnlineClientManager _onlineClientManager;
protected IOnlineClientManager OnlineClientManager => LazyGetRequiredService(ref _onlineClientManager);
private IHttpContextAccessor _httpContextAccessor;
protected IHttpContextAccessor HttpContextAccessor => LazyGetRequiredService(ref _httpContextAccessor);
public override async Task OnConnectedAsync()
{
await base.OnConnectedAsync();
IOnlineClient onlineClient = CreateClientForCurrentConnection();
Logger.LogDebug("A client is connected: " + onlineClient.ToString());
OnlineClientManager.Add(onlineClient);
if (onlineClient.TenantId.HasValue)
{
// 以租户为分组,将用户加入租户通讯组
await Groups.AddToGroupAsync(onlineClient.ConnectionId, onlineClient.TenantId.Value.ToString());
}
}
public override async Task OnDisconnectedAsync(Exception exception)
{
await base.OnDisconnectedAsync(exception);
Logger.LogDebug("A client is disconnected: " + Context.ConnectionId);
try
{
// 从通讯组移除
var onlineClient = OnlineClientManager.GetByConnectionIdOrNull(Context.ConnectionId);
if(onlineClient != null)
{
// 移除在线客户端
OnlineClientManager.Remove(Context.ConnectionId);
}
}
catch (Exception ex)
{
Logger.LogWarning(ex.ToString(), ex);
}
}
protected virtual IOnlineClient CreateClientForCurrentConnection()
{
// abp框架没有处理,需要切换一下用户身份令牌.否则无法获取用户信息
using (CurrentPrincipalAccessor.Change(Context.User))
{
return new OnlineClient(Context.ConnectionId, GetClientIpAddress(),
CurrentTenant.Id, CurrentUser.Id)
{
ConnectTime = Clock.Now,
UserName = CurrentUser.UserName
};
}
}
protected virtual string GetClientIpAddress()
{
try
{
return HttpContextAccessor.HttpContext?.Connection?.RemoteIpAddress?.ToString();
}
catch (Exception ex)
{
Logger.LogException(ex, LogLevel.Warning);
return null;
}
}
}
}

54
aspnet-core/modules/common/LINGYUN.Abp.Notifications.SignalR/LINGYUN/Abp/Notifications/SignalR/SignalRNotificationPublishProvider.cs

@ -4,7 +4,9 @@ using Microsoft.AspNetCore.SignalR;
using Microsoft.Extensions.Logging;
using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
namespace LINGYUN.Abp.Notifications.SignalR
@ -28,51 +30,41 @@ namespace LINGYUN.Abp.Notifications.SignalR
_onlineClientManager = onlineClientManager;
}
public override async Task PublishAsync(NotificationInfo notification, IEnumerable<UserIdentifier> identifiers)
protected override async Task PublishAsync(NotificationInfo notification, IEnumerable<UserIdentifier> identifiers, CancellationToken cancellationToken = default)
{
if (notification.Data.HasTenantNotification(out Guid tenantId))
if (identifiers?.Count() == 0)
{
// 返回标准数据给前端
notification.Data = NotificationData.ToStandardData(notification.Data);
var singalRGroup = _hubContext.Clients.Group(tenantId.ToString());
var groupName = notification.TenantId?.ToString() ?? "Global";
var singalRGroup = _hubContext.Clients.Group(groupName);
if (singalRGroup == null)
{
Logger.LogDebug("Can not get group " + tenantId + " from SignalR hub!");
Logger.LogDebug("Can not get group " + groupName + " from SignalR hub!");
return;
}
// 租户通知群发
Logger.LogDebug($"Found a singalr group, begin senging notifications");
await singalRGroup.SendAsync("getNotification", notification);
await singalRGroup.SendAsync("getNotification", notification, cancellationToken);
}
else
{
// 返回标准数据给前端
notification.Data = NotificationData.ToStandardData(notification.Data);
foreach (var identifier in identifiers)
var onlineClients = _onlineClientManager.GetAllClients(client => identifiers.Any(ids => client.UserId == ids.UserId));
var onlineClientConnectionIds = onlineClients.Select(client => client.ConnectionId).ToImmutableArray();
try
{
Logger.LogDebug($"Find online client with user {identifier.UserId} - {identifier.UserName}");
var onlineClientContext = new OnlineClientContext(notification.TenantId, identifier.UserId);
var onlineClients = _onlineClientManager.GetAllByContext(onlineClientContext);
foreach (var onlineClient in onlineClients)
var signalRClients = _hubContext.Clients.Clients(onlineClientConnectionIds);
if (signalRClients == null)
{
try
{
Logger.LogDebug($"Find online client {onlineClient.UserId} - {onlineClient.ConnectionId}");
var signalRClient = _hubContext.Clients.Client(onlineClient.ConnectionId);
if (signalRClient == null)
{
Logger.LogDebug("Can not get user " + onlineClientContext.UserId + " with connectionId " + onlineClient.ConnectionId + " from SignalR hub!");
continue;
}
Logger.LogDebug($"Found a singalr client, begin senging notifications");
await signalRClient.SendAsync("getNotification", notification);
}
catch (Exception ex)
{
Logger.LogWarning("Could not send notifications to user: {0}", identifier.UserId);
Logger.LogWarning("Send to user notifications error: {0}", ex.Message);
}
Logger.LogDebug("Can not get users connection from SignalR hub!");
return;
}
Logger.LogDebug($"Found a singalr client, begin senging notifications");
await signalRClients.SendAsync("getNotification", notification, cancellationToken);
}
catch (Exception ex)
{
Logger.LogWarning("Could not send notifications to all users");
Logger.LogWarning("Send to user notifications error: {0}", ex.Message);
}
}
}

25
aspnet-core/modules/common/LINGYUN.Abp.Notifications.SignalR/Microsoft/AspNetCore/Http/SignalRJwtTokenMiddleware.cs

@ -1,25 +0,0 @@
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
namespace Microsoft.AspNetCore.Http
{
public class SignalRJwtTokenMiddleware : IMiddleware, ITransientDependency
{
public async Task InvokeAsync(HttpContext context, RequestDelegate next)
{
// 仅针对自定义的SignalR hub
if (context.Request.Path.StartsWithSegments("/signalr-hubs/notifications"))
{
if (context.User.Identity?.IsAuthenticated != true)
{
if (context.Request.Query.TryGetValue("access_token", out var accessToken))
{
context.Request.Headers.Add("Authorization", $"Bearer {accessToken}");
}
}
}
await next(context);
}
}
}

5
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/AbpNotificationModule.cs

@ -22,11 +22,6 @@ namespace LINGYUN.Abp.Notifications
AutoAddDefinitionProviders(context.Services);
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddTransient<INotificationDispatcher, DefaultNotificationDispatcher>();
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
var options = context.ServiceProvider.GetRequiredService<IOptions<AbpNotificationCleanupOptions>>().Value;

15
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/INotificationDefinitionContext.cs

@ -1,9 +1,18 @@
namespace LINGYUN.Abp.Notifications
using JetBrains.Annotations;
using Volo.Abp.Localization;
using Volo.Abp.MultiTenancy;
namespace LINGYUN.Abp.Notifications
{
public interface INotificationDefinitionContext
{
NotificationDefinition GetOrNull(string category);
NotificationGroupDefinition AddGroup(
[NotNull] string name,
ILocalizableString displayName = null,
bool allowSubscriptionToClients = true);
NotificationGroupDefinition GetGroupOrNull(string name);
void Add(params NotificationDefinition[] definitions);
void RemoveGroup(string name);
}
}

6
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/INotificationDefinitionManager.cs

@ -6,10 +6,12 @@ namespace LINGYUN.Abp.Notifications
public interface INotificationDefinitionManager
{
[NotNull]
NotificationDefinition Get([NotNull] string category);
NotificationDefinition Get([NotNull] string name);
IReadOnlyList<NotificationDefinition> GetAll();
NotificationDefinition GetOrNull(string category);
NotificationDefinition GetOrNull(string name);
IReadOnlyList<NotificationGroupDefinition> GetGroups();
}
}

41
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/INotificationDispatcher.cs

@ -6,28 +6,29 @@ namespace LINGYUN.Abp.Notifications
/// <summary>
/// 通知发送者接口
/// </summary>
[Obsolete("Notification system redesigned, publisher interface deactivated, please use INotificationSender")]
public interface INotificationDispatcher
{
/// <summary>
/// 发送通知
/// </summary>
/// <param name="notificationName">通知名称</param>
/// <param name="data">数据</param>
/// <param name="tenantId">租户</param>
/// <param name="notificationSeverity">级别</param>
/// <returns></returns>
Task DispatchAsync(NotificationName notificationName, NotificationData data, Guid? tenantId = null,
NotificationSeverity notificationSeverity = NotificationSeverity.Info);
///// <summary>
///// 发送通知
///// </summary>
///// <param name="notificationName">通知名称</param>
///// <param name="data">数据</param>
///// <param name="tenantId">租户</param>
///// <param name="notificationSeverity">级别</param>
///// <returns></returns>
//Task DispatchAsync(NotificationName notificationName, NotificationData data, Guid? tenantId = null,
// NotificationSeverity notificationSeverity = NotificationSeverity.Info);
/// <summary>
/// 发送通知事件
/// </summary>
/// <param name="notificationName">通知名称</param>
/// <param name="data">数据</param>
/// <param name="tenantId">租户</param>
/// <param name="notificationSeverity">级别</param>
/// <returns></returns>
Task DispatchEventAsync(NotificationName notificationName, NotificationData data, Guid? tenantId = null,
NotificationSeverity notificationSeverity = NotificationSeverity.Info);
///// <summary>
///// 发送通知事件
///// </summary>
///// <param name="notificationName">通知名称</param>
///// <param name="data">数据</param>
///// <param name="tenantId">租户</param>
///// <param name="notificationSeverity">级别</param>
///// <returns></returns>
//Task DispatchEventAsync(NotificationName notificationName, NotificationData data, Guid? tenantId = null,
// NotificationSeverity notificationSeverity = NotificationSeverity.Info);
}
}

41
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/INotificationSender.cs

@ -0,0 +1,41 @@
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace LINGYUN.Abp.Notifications
{
/// <summary>
/// 发送通知接口
/// </summary>
public interface INotificationSender
{
/// <summary>
/// 发送通知
/// </summary>
/// <param name="name">名称</param>
/// <param name="data">数据</param>
/// <param name="userId">用户,为空标识发给所有订阅用户</param>
/// <param name="tenantId">租户</param>
/// <param name="severity">严重级别</param>
Task SendNofiterAsync(
string name,
NotificationData data,
UserIdentifier user = null,
Guid? tenantId = null,
NotificationSeverity severity = NotificationSeverity.Info);
/// <summary>
/// 发送通知
/// </summary>
/// <param name="name">名称</param>
/// <param name="data">数据</param>
/// <param name="users">用户列表,为空标识发给所有订阅用户</param>
/// <param name="tenantId">租户</param>
/// <param name="severity">严重级别</param>
Task SendNofitersAsync(
string name,
NotificationData data,
IEnumerable<UserIdentifier> users = null,
Guid? tenantId = null,
NotificationSeverity severity = NotificationSeverity.Info);
}
}

151
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/INotificationStore.cs

@ -1,45 +1,126 @@
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
namespace LINGYUN.Abp.Notifications
{
public interface INotificationStore
{
Task InsertUserSubscriptionAsync(Guid? tenantId, UserIdentifier identifier, string notificationName);
Task InsertUserSubscriptionAsync(Guid? tenantId, IEnumerable<UserIdentifier> identifiers, string notificationName);
Task DeleteUserSubscriptionAsync(Guid? tenantId, Guid userId, string notificationName);
Task DeleteAllUserSubscriptionAsync(Guid? tenantId, string notificationName);
Task DeleteUserSubscriptionAsync(Guid? tenantId, IEnumerable<UserIdentifier> identifiers, string notificationName);
Task<List<NotificationSubscriptionInfo>> GetSubscriptionsAsync(Guid? tenantId, string notificationName);
Task<List<NotificationSubscriptionInfo>> GetUserSubscriptionsAsync(Guid? tenantId, Guid userId);
Task<List<NotificationSubscriptionInfo>> GetUserSubscriptionsAsync(Guid? tenantId, string userName);
Task<bool> IsSubscribedAsync(Guid? tenantId, Guid userId, string notificationName);
Task InsertNotificationAsync(NotificationInfo notification);
Task DeleteNotificationAsync(NotificationInfo notification);
Task DeleteNotificationAsync(int batchCount);
Task InsertUserNotificationAsync(NotificationInfo notification, Guid userId);
Task InsertUserNotificationsAsync(NotificationInfo notification, IEnumerable<Guid> userIds);
Task DeleteUserNotificationAsync(Guid? tenantId, Guid userId, long notificationId);
Task<NotificationInfo> GetNotificationOrNullAsync(Guid? tenantId, long notificationId);
Task<List<NotificationInfo>> GetUserNotificationsAsync(Guid? tenantId, Guid userId, NotificationReadState readState = NotificationReadState.UnRead, int maxResultCount = 10);
Task ChangeUserNotificationReadStateAsync(Guid? tenantId, Guid userId, long notificationId, NotificationReadState readState);
Task InsertUserSubscriptionAsync(
Guid? tenantId,
UserIdentifier identifier,
string notificationName,
CancellationToken cancellationToken = default);
Task InsertUserSubscriptionAsync(
Guid? tenantId,
IEnumerable<UserIdentifier> identifiers,
string notificationName,
CancellationToken cancellationToken = default);
Task DeleteUserSubscriptionAsync(
Guid? tenantId,
Guid userId,
string notificationName,
CancellationToken cancellationToken = default);
Task DeleteAllUserSubscriptionAsync(
Guid? tenantId,
string notificationName,
CancellationToken cancellationToken = default);
Task DeleteUserSubscriptionAsync(
Guid? tenantId,
IEnumerable<UserIdentifier> identifiers,
string notificationName,
CancellationToken cancellationToken = default);
Task<List<NotificationSubscriptionInfo>> GetUserSubscriptionsAsync(
Guid? tenantId,
string notificationName,
IEnumerable<UserIdentifier> identifiers = null,
CancellationToken cancellationToken = default);
Task<List<NotificationSubscriptionInfo>> GetUserSubscriptionsAsync(
Guid? tenantId,
Guid userId,
CancellationToken cancellationToken = default);
Task<List<NotificationSubscriptionInfo>> GetUserSubscriptionsAsync(
Guid? tenantId,
string userName,
CancellationToken cancellationToken = default);
Task<bool> IsSubscribedAsync(
Guid? tenantId,
Guid userId,
string notificationName,
CancellationToken cancellationToken = default);
Task InsertNotificationAsync(
NotificationInfo notification,
CancellationToken cancellationToken = default);
Task DeleteNotificationAsync(
NotificationInfo notification,
CancellationToken cancellationToken = default);
Task DeleteNotificationAsync(
int batchCount,
CancellationToken cancellationToken = default);
Task InsertUserNotificationAsync(
NotificationInfo notification,
Guid userId,
CancellationToken cancellationToken = default);
Task InsertUserNotificationsAsync(
NotificationInfo notification,
IEnumerable<Guid> userIds,
CancellationToken cancellationToken = default);
Task DeleteUserNotificationAsync(
Guid? tenantId,
Guid userId,
long notificationId,
CancellationToken cancellationToken = default);
Task<NotificationInfo> GetNotificationOrNullAsync(
Guid? tenantId,
long notificationId,
CancellationToken cancellationToken = default);
Task<List<NotificationInfo>> GetUserNotificationsAsync(
Guid? tenantId,
Guid userId,
NotificationReadState readState = NotificationReadState.UnRead,
int maxResultCount = 10,
CancellationToken cancellationToken = default);
Task<int> GetUserNotificationsCountAsync(
Guid? tenantId,
Guid userId,
string filter = "",
NotificationReadState readState = NotificationReadState.UnRead,
CancellationToken cancellationToken = default);
Task<List<NotificationInfo>> GetUserNotificationsAsync(
Guid? tenantId,
Guid userId,
string filter = "",
string sorting = nameof(NotificationInfo.CreationTime),
bool reverse = true,
NotificationReadState readState = NotificationReadState.UnRead,
int skipCount = 1,
int maxResultCount = 10,
CancellationToken cancellationToken = default);
Task ChangeUserNotificationReadStateAsync(
Guid? tenantId,
Guid userId,
long notificationId,
NotificationReadState readState,
CancellationToken cancellationToken = default);
}
}

53
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/INotificationSubscriptionManager.cs

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
namespace LINGYUN.Abp.Notifications
@ -16,7 +17,11 @@ namespace LINGYUN.Abp.Notifications
/// <param name="userId">用户标识</param>
/// <param name="notificationName">通知名称</param>
/// <returns></returns>
Task<bool> IsSubscribedAsync(Guid? tenantId, Guid userId, string notificationName);
Task<bool> IsSubscribedAsync(
Guid? tenantId,
Guid userId,
string notificationName,
CancellationToken cancellationToken = default);
/// <summary>
/// 订阅通知
/// </summary>
@ -24,7 +29,11 @@ namespace LINGYUN.Abp.Notifications
/// <param name="identifier">用户标识</param>
/// <param name="notificationName">通知名称</param>
/// <returns></returns>
Task SubscribeAsync(Guid? tenantId, UserIdentifier identifier, string notificationName);
Task SubscribeAsync(
Guid? tenantId,
UserIdentifier identifier,
string notificationName,
CancellationToken cancellationToken = default);
/// <summary>
/// 订阅通知
/// </summary>
@ -32,14 +41,21 @@ namespace LINGYUN.Abp.Notifications
/// <param name="identifiers">用户标识列表</param>
/// <param name="notificationName">通知名称</param>
/// <returns></returns>
Task SubscribeAsync(Guid? tenantId, IEnumerable<UserIdentifier> identifiers, string notificationName);
Task SubscribeAsync(
Guid? tenantId,
IEnumerable<UserIdentifier> identifiers,
string notificationName,
CancellationToken cancellationToken = default);
/// <summary>
/// 取消所有用户订阅
/// </summary>
/// <param name="tenantId">租户</param>
/// <param name="notificationName">通知名称</param>
/// <returns></returns>
Task UnsubscribeAllAsync(Guid? tenantId, string notificationName);
Task UnsubscribeAllAsync(
Guid? tenantId,
string notificationName,
CancellationToken cancellationToken = default);
/// <summary>
/// 取消订阅
/// </summary>
@ -47,7 +63,11 @@ namespace LINGYUN.Abp.Notifications
/// <param name="identifier">用户标识</param>
/// <param name="notificationName">通知名称</param>
/// <returns></returns>
Task UnsubscribeAsync(Guid? tenantId, UserIdentifier identifier, string notificationName);
Task UnsubscribeAsync(
Guid? tenantId,
UserIdentifier identifier,
string notificationName,
CancellationToken cancellationToken = default);
/// <summary>
/// 取消订阅
/// </summary>
@ -55,27 +75,42 @@ namespace LINGYUN.Abp.Notifications
/// <param name="identifiers">用户标识列表</param>
/// <param name="notificationName">通知名称</param>
/// <returns></returns>
Task UnsubscribeAsync(Guid? tenantId, IEnumerable<UserIdentifier> identifiers, string notificationName);
Task UnsubscribeAsync(
Guid? tenantId,
IEnumerable<UserIdentifier> identifiers,
string notificationName,
CancellationToken cancellationToken = default);
/// <summary>
/// 获取通知被订阅用户列表
/// </summary>
/// <param name="tenantId">租户</param>
/// <param name="notificationName">通知名称</param>
/// <param name="identifiers">需要检查的用户列表</param>
/// <returns></returns>
Task<List<NotificationSubscriptionInfo>> GetSubscriptionsAsync(Guid? tenantId, string notificationName);
Task<List<NotificationSubscriptionInfo>> GetUsersSubscriptionsAsync(
Guid? tenantId,
string notificationName,
IEnumerable<UserIdentifier> identifiers = null,
CancellationToken cancellationToken = default);
/// <summary>
/// 获取用户订阅列表
/// </summary>
/// <param name="tenantId">租户</param>
/// <param name="userId">用户标识</param>
/// <returns></returns>
Task<List<NotificationSubscriptionInfo>> GetUserSubscriptionsAsync(Guid? tenantId, Guid userId);
Task<List<NotificationSubscriptionInfo>> GetUserSubscriptionsAsync(
Guid? tenantId,
Guid userId,
CancellationToken cancellationToken = default);
/// <summary>
/// 获取用户订阅列表
/// </summary>
/// <param name="tenantId">租户</param>
/// <param name="userName">用户名</param>
/// <returns></returns>
Task<List<NotificationSubscriptionInfo>> GetUserSubscriptionsAsync(Guid? tenantId, string userName);
Task<List<NotificationSubscriptionInfo>> GetUserSubscriptionsAsync(
Guid? tenantId,
string userName,
CancellationToken cancellationToken = default);
}
}

220
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/Internal/DefaultNotificationDispatcher.cs

@ -1,220 +0,0 @@
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.BackgroundJobs;
using Volo.Abp.EventBus.Distributed;
namespace LINGYUN.Abp.Notifications.Internal
{
/// <summary>
/// Implements <see cref="INotificationDispatcher"/>.
/// </summary>
internal class DefaultNotificationDispatcher : INotificationDispatcher
{
/// <summary>
/// Reference to <see cref="ILogger<DefaultNotificationDispatcher>"/>.
/// </summary>
public ILogger<DefaultNotificationDispatcher> Logger { get; set; }
/// <summary>
/// Reference to <see cref="IDistributedEventBus"/>.
/// </summary>
public IDistributedEventBus DistributedEventBus { get; set; }
/// <summary>
/// Reference to <see cref="AbpNotificationOptions"/>.
/// </summary>
private readonly AbpNotificationOptions _notificationOptions;
/// <summary>
/// Reference to <see cref="IBackgroundJobManager"/>.
/// </summary>
private readonly IBackgroundJobManager _backgroundJobManager;
/// <summary>
/// Reference to <see cref="INotificationStore"/>.
/// </summary>
private readonly INotificationStore _notificationStore;
/// <summary>
/// Reference to <see cref="INotificationDefinitionManager"/>.
/// </summary>
private readonly INotificationDefinitionManager _notificationDefinitionManager;
/// <summary>
/// Reference to <see cref="INotificationPublishProviderManager"/>.
/// </summary>
private readonly INotificationPublishProviderManager _notificationPublishProviderManager;
/// <summary>
/// Initializes a new instance of the <see cref="DefaultNotificationDispatcher"/> class.
/// </summary>
public DefaultNotificationDispatcher(
IBackgroundJobManager backgroundJobManager,
IOptions<AbpNotificationOptions> options,
INotificationStore notificationStore,
INotificationDefinitionManager notificationDefinitionManager,
INotificationPublishProviderManager notificationPublishProviderManager)
{
_backgroundJobManager = backgroundJobManager;
_notificationOptions = options.Value;
_notificationStore = notificationStore;
_notificationDefinitionManager = notificationDefinitionManager;
_notificationPublishProviderManager = notificationPublishProviderManager;
DistributedEventBus = NullDistributedEventBus.Instance;
Logger = NullLogger<DefaultNotificationDispatcher>.Instance;
}
/// <summary>
/// 发送通知
/// </summary>
/// <param name="notificationName">通知名称</param>
/// <param name="data">通知数据</param>
/// <param name="tenantId">租户</param>
/// <param name="notificationSeverity">级别</param>
/// <returns></returns>
public virtual async Task DispatchAsync(NotificationName notificationName, NotificationData data, Guid? tenantId = null,
NotificationSeverity notificationSeverity = NotificationSeverity.Info)
{
// 获取自定义的通知
var defineNotification = _notificationDefinitionManager.Get(notificationName.CateGory);
//// 没有定义的通知,应该也要能发布、订阅,
//// 比如订单之类的,是以订单编号为通知名称,这是动态的,没法自定义
//if(defineNotification == null)
//{
// defineNotification = new NotificationDefinition(notificationName.CateGory);
//}
var notificationInfo = new NotificationInfo
{
CateGory = notificationName.CateGory,
Name = notificationName.Name,
CreationTime = DateTime.Now,
NotificationSeverity = notificationSeverity,
Lifetime = defineNotification.NotificationLifetime,
NotificationType = defineNotification.NotificationType,
TenantId = tenantId,
Data = data
};
var providers = Enumerable
.Reverse(_notificationPublishProviderManager.Providers);
if (defineNotification.Providers.Any())
{
providers = providers.Where(p => defineNotification.Providers.Contains(p.Name));
}
await PublishFromProvidersAsync(providers, notificationInfo);
if (notificationInfo.Lifetime == NotificationLifetime.OnlyOne)
{
// 一次性通知在发送完成后就取消用户订阅
await _notificationStore.DeleteAllUserSubscriptionAsync(notificationInfo.TenantId,
notificationInfo.Name);
}
}
/// <summary>
/// 发送通知事件
/// </summary>
/// <param name="notificationName"></param>
/// <param name="data"></param>
/// <param name="tenantId"></param>
/// <param name="notificationSeverity"></param>
/// <returns></returns>
public virtual async Task DispatchEventAsync(NotificationName notificationName, NotificationData data, Guid? tenantId = null,
NotificationSeverity notificationSeverity = NotificationSeverity.Info)
{
// 获取自定义的通知
var defineNotification = _notificationDefinitionManager.Get(notificationName.CateGory);
var notificationEventData = new NotificationEventData
{
CateGory = notificationName.CateGory,
Name = notificationName.Name,
CreationTime = DateTime.Now,
NotificationSeverity = notificationSeverity,
Lifetime = defineNotification.NotificationLifetime,
NotificationType = defineNotification.NotificationType,
TenantId = tenantId,
Data = data
};
// 发布分布式通知事件,让消息中心统一处理
await DistributedEventBus.PublishAsync(notificationEventData);
}
/// <summary>
/// 指定提供者发布通知
/// </summary>
/// <param name="providers">提供者列表</param>
/// <param name="notificationInfo">通知信息</param>
/// <returns></returns>
protected async Task PublishFromProvidersAsync(IEnumerable<INotificationPublishProvider> providers,
NotificationInfo notificationInfo)
{
Logger.LogDebug($"Persistent notification {notificationInfo.Name}");
// 持久化通知
await _notificationStore.InsertNotificationAsync(notificationInfo);
Logger.LogDebug($"Gets a list of user subscriptions {notificationInfo.Name}");
// 获取用户订阅列表
var userSubscriptions = await _notificationStore.GetSubscriptionsAsync(notificationInfo.TenantId, notificationInfo.Name);
Logger.LogDebug($"Persistent user notifications {notificationInfo.Name}");
// 持久化用户通知
var subscriptionUserIdentifiers = userSubscriptions.Select(us => new UserIdentifier(us.UserId, us.UserName));
await _notificationStore.InsertUserNotificationsAsync(notificationInfo,
subscriptionUserIdentifiers.Select(u => u.UserId));
// 发布通知
foreach (var provider in providers)
{
await PublishAsync(provider, notificationInfo, subscriptionUserIdentifiers);
}
// TODO: 需要计算队列大小,根据情况是否需要并行发布消息
//Parallel.ForEach(providers, async (provider) =>
//{
// await PublishAsync(provider, notificationInfo, subscriptionUserIdentifiers);
//});
}
/// <summary>
/// 发布通知
/// </summary>
/// <param name="provider">通知发布者</param>
/// <param name="notificationInfo">通知信息</param>
/// <param name="subscriptionUserIdentifiers">订阅用户列表</param>
/// <returns></returns>
protected async Task PublishAsync(INotificationPublishProvider provider, NotificationInfo notificationInfo,
IEnumerable<UserIdentifier> subscriptionUserIdentifiers)
{
try
{
Logger.LogDebug($"Sending notification with provider {provider.Name}");
var notifacationDataMapping = _notificationOptions.NotificationDataMappings
.GetMapItemOrNull(notificationInfo.CateGory, provider.Name);
if (notifacationDataMapping != null)
{
notificationInfo.Data = notifacationDataMapping.MappingFunc(notificationInfo.Data);
}
// 发布
await provider.PublishAsync(notificationInfo, subscriptionUserIdentifiers);
Logger.LogDebug($"Send notification {notificationInfo.Name} with provider {provider.Name} was successful");
}
catch (Exception ex)
{
Logger.LogWarning($"Send notification error with provider {provider.Name}");
Logger.LogWarning($"Error message:{ex.Message}");
Logger.LogTrace(ex, $"Send notification error with provider { provider.Name}");
Logger.LogDebug($"Send notification error, notification {notificationInfo.Name} entry queue");
// 发送失败的消息进入后台队列
await _backgroundJobManager.EnqueueAsync(
new NotificationPublishJobArgs(notificationInfo.GetId(),
provider.GetType().AssemblyQualifiedName,
subscriptionUserIdentifiers.ToList(),
notificationInfo.TenantId));
}
}
}
}

78
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/Internal/NotificationSender.cs

@ -0,0 +1,78 @@
using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.EventBus.Distributed;
namespace LINGYUN.Abp.Notifications
{
public class NotificationSender : INotificationSender, ITransientDependency
{
/// <summary>
/// Reference to <see cref="ILogger<NotificationSender>"/>.
/// </summary>
public ILogger<NotificationSender> Logger { get; set; }
/// <summary>
/// Reference to <see cref="IDistributedEventBus"/>.
/// </summary>
public IDistributedEventBus DistributedEventBus { get; }
public NotificationSender(
IDistributedEventBus distributedEventBus)
{
DistributedEventBus = distributedEventBus;
Logger = NullLogger<NotificationSender>.Instance;
}
public async Task SendNofiterAsync(
string name,
NotificationData data,
UserIdentifier user = null,
Guid? tenantId = null,
NotificationSeverity severity = NotificationSeverity.Info)
{
if (user == null)
{
await PublishNofiterAsync(name, data, null, tenantId, severity);
}
else
{
await PublishNofiterAsync(name, data, new List<UserIdentifier> { user }, tenantId, severity);
}
}
public async Task SendNofitersAsync(
string name,
NotificationData data,
IEnumerable<UserIdentifier> users = null,
Guid? tenantId = null,
NotificationSeverity severity = NotificationSeverity.Info)
{
await PublishNofiterAsync(name, data, users, tenantId, severity);
}
protected async Task PublishNofiterAsync(
string name,
NotificationData data,
IEnumerable<UserIdentifier> users = null,
Guid? tenantId = null,
NotificationSeverity severity = NotificationSeverity.Info)
{
await DistributedEventBus
.PublishAsync(
new NotificationEventData
{
TenantId = tenantId,
Users = users?.ToList(),
Name = name,
Data = data,
CreationTime = DateTime.Now,
Severity = severity
});
}
}
}

72
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/Internal/NotificationSubscriptionManager.cs

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
@ -15,56 +16,89 @@ namespace LINGYUN.Abp.Notifications.Internal
_store = store;
}
public virtual async Task<List<NotificationSubscriptionInfo>> GetSubscriptionsAsync(Guid? tenantId, string notificationName)
public virtual async Task<List<NotificationSubscriptionInfo>> GetUsersSubscriptionsAsync(
Guid? tenantId,
string notificationName,
IEnumerable<UserIdentifier> identifiers = null,
CancellationToken cancellationToken = default)
{
return await _store.GetSubscriptionsAsync(tenantId, notificationName);
return await _store.GetUserSubscriptionsAsync(tenantId, notificationName, identifiers, cancellationToken);
}
public virtual async Task<List<NotificationSubscriptionInfo>> GetUserSubscriptionsAsync(Guid? tenantId, Guid userId)
public virtual async Task<List<NotificationSubscriptionInfo>> GetUserSubscriptionsAsync(
Guid? tenantId,
Guid userId,
CancellationToken cancellationToken = default)
{
return await _store.GetUserSubscriptionsAsync(tenantId, userId);
return await _store.GetUserSubscriptionsAsync(tenantId, userId, cancellationToken);
}
public virtual async Task<List<NotificationSubscriptionInfo>> GetUserSubscriptionsAsync(Guid? tenantId, string userName)
public virtual async Task<List<NotificationSubscriptionInfo>> GetUserSubscriptionsAsync(
Guid? tenantId,
string userName,
CancellationToken cancellationToken = default)
{
return await _store.GetUserSubscriptionsAsync(tenantId, userName);
return await _store.GetUserSubscriptionsAsync(tenantId, userName, cancellationToken);
}
public virtual async Task<bool> IsSubscribedAsync(Guid? tenantId, Guid userId, string notificationName)
public virtual async Task<bool> IsSubscribedAsync(
Guid? tenantId,
Guid userId,
string notificationName,
CancellationToken cancellationToken = default)
{
return await _store.IsSubscribedAsync(tenantId, userId, notificationName);
return await _store.IsSubscribedAsync(tenantId, userId, notificationName, cancellationToken);
}
public virtual async Task SubscribeAsync(Guid? tenantId, UserIdentifier identifier, string notificationName)
public virtual async Task SubscribeAsync(
Guid? tenantId,
UserIdentifier identifier,
string notificationName,
CancellationToken cancellationToken = default)
{
if (await IsSubscribedAsync(tenantId, identifier.UserId, notificationName))
if (await IsSubscribedAsync(tenantId, identifier.UserId, notificationName, cancellationToken))
{
return;
}
await _store.InsertUserSubscriptionAsync(tenantId, identifier, notificationName);
await _store.InsertUserSubscriptionAsync(tenantId, identifier, notificationName, cancellationToken);
}
public virtual async Task SubscribeAsync(Guid? tenantId, IEnumerable<UserIdentifier> identifiers, string notificationName)
public virtual async Task SubscribeAsync(
Guid? tenantId,
IEnumerable<UserIdentifier> identifiers,
string notificationName,
CancellationToken cancellationToken = default)
{
foreach(var identifier in identifiers)
{
await SubscribeAsync(tenantId, identifier, notificationName);
await SubscribeAsync(tenantId, identifier, notificationName, cancellationToken);
}
}
public virtual async Task UnsubscribeAsync(Guid? tenantId, UserIdentifier identifier, string notificationName)
public virtual async Task UnsubscribeAsync(
Guid? tenantId,
UserIdentifier identifier,
string notificationName,
CancellationToken cancellationToken = default)
{
await _store.DeleteUserSubscriptionAsync(tenantId, identifier.UserId, notificationName);
await _store.DeleteUserSubscriptionAsync(tenantId, identifier.UserId, notificationName, cancellationToken);
}
public virtual async Task UnsubscribeAllAsync(Guid? tenantId, string notificationName)
public virtual async Task UnsubscribeAllAsync(
Guid? tenantId,
string notificationName,
CancellationToken cancellationToken = default)
{
await _store.DeleteAllUserSubscriptionAsync(tenantId, notificationName);
await _store.DeleteAllUserSubscriptionAsync(tenantId, notificationName, cancellationToken);
}
public virtual async Task UnsubscribeAsync(Guid? tenantId, IEnumerable<UserIdentifier> identifiers, string notificationName)
public virtual async Task UnsubscribeAsync(
Guid? tenantId,
IEnumerable<UserIdentifier> identifiers,
string notificationName,
CancellationToken cancellationToken = default)
{
await _store.DeleteUserSubscriptionAsync(tenantId, identifiers, notificationName);
await _store.DeleteUserSubscriptionAsync(tenantId, identifiers, notificationName, cancellationToken);
}
}
}

23
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/LocalizableStringInfo.cs

@ -0,0 +1,23 @@
using System.Collections.Generic;
namespace LINGYUN.Abp.Notifications
{
public class LocalizableStringInfo
{
public string ResourceName { get; }
public string Name { get; }
public Dictionary<object, object> Values { get; }
public LocalizableStringInfo(
string resourceName,
string name,
Dictionary<object, object> values = null)
{
ResourceName = resourceName;
Name = name;
Values = values;
}
}
}

96
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationData.cs

@ -3,12 +3,16 @@ using System.Collections.Generic;
namespace LINGYUN.Abp.Notifications
{
/// <summary>
/// 通知数据
/// </summary>
/// <remarks>
/// TODO: 2020-10-29 针对不同语言的用户,如果在发布时期就本地化语言是错误的设计
/// 把通知的标题和内容设计为 <see cref="LocalizableStringInfo"/> 让客户端自行本地化
/// </remarks>
public class NotificationData
{
public const string NotificationKey = "N:G";
public const string UserIdNotificationKey = "N:UI";
public const string UserNameNotificationKey = "N:UN";
public const string TenantNotificationKey = "N:T";
public const string LocalizerKey = "localizer";
public virtual string Type => GetType().FullName;
public object this[string key]
@ -48,30 +52,35 @@ namespace LINGYUN.Abp.Notifications
public NotificationData()
{
_properties = new Dictionary<string, object>();
TrySetData(LocalizerKey, false);
}
public static NotificationData CreateNotificationData()
{
var data = new NotificationData();
data.TrySetData(NotificationKey, "AbpNotification");
return data;
}
public static NotificationData CreateUserNotificationData(Guid userId, string userName)
{
var data = new NotificationData();
data.TrySetData(UserIdNotificationKey, userId);
data.TrySetData(UserNameNotificationKey, userName);
return data;
}
public static NotificationData CreateTenantNotificationData(Guid tenantId)
/// <summary>
/// 写入本地化的消息数据
/// </summary>
/// <param name="title"></param>
/// <param name="message"></param>
/// <param name="createTime"></param>
/// <param name="formUser"></param>
/// <param name="description"></param>
/// <returns></returns>
public NotificationData WriteLocalizedData(
LocalizableStringInfo title,
LocalizableStringInfo message,
DateTime createTime,
string formUser,
LocalizableStringInfo description = null)
{
var data = new NotificationData();
data.TrySetData(TenantNotificationKey, tenantId);
return data;
TrySetData("title", title);
TrySetData("message", message);
TrySetData("formUser", formUser);
TrySetData("createTime", createTime);
TrySetData(LocalizerKey, true);
if (description != null)
{
TrySetData("description", description);
}
return this;
}
/// <summary>
/// 写入标准数据
/// </summary>
@ -79,13 +88,16 @@ namespace LINGYUN.Abp.Notifications
/// <param name="message">内容</param>
/// <param name="createTime">创建时间</param>
/// <param name="formUser">来源用户</param>
/// <param name="description">附加说明</param>
/// <returns></returns>
public NotificationData WriteStandardData(string title, string message, DateTime createTime, string formUser)
public NotificationData WriteStandardData(string title, string message, DateTime createTime, string formUser, string description = "")
{
TrySetData("title", title);
TrySetData("message", message);
TrySetData("description", description);
TrySetData("formUser", formUser);
TrySetData("createTime", createTime);
TrySetData(LocalizerKey, false);
return this;
}
/// <summary>
@ -98,6 +110,7 @@ namespace LINGYUN.Abp.Notifications
public NotificationData WriteStandardData(string prefix, string key, object value)
{
TrySetData(string.Concat(prefix, key), value);
TrySetData(LocalizerKey, false);
return this;
}
/// <summary>
@ -110,8 +123,10 @@ namespace LINGYUN.Abp.Notifications
var data = new NotificationData();
data.TrySetData("title", sourceData.TryGetData("title"));
data.TrySetData("message", sourceData.TryGetData("message"));
data.TrySetData("description", sourceData.TryGetData("description"));
data.TrySetData("formUser", sourceData.TryGetData("formUser"));
data.TrySetData("createTime", sourceData.TryGetData("createTime"));
data.TrySetData(LocalizerKey, sourceData.TryGetData(LocalizerKey));
return data;
}
/// <summary>
@ -147,29 +162,20 @@ namespace LINGYUN.Abp.Notifications
{
if (value != null && !Properties.ContainsKey(key))
{
Properties[key] = value;
Properties.Add(key, value);
}
Properties[key] = value;
}
public bool HasUserNotification(out Guid userId, out string userName)
{
if (Properties.TryGetValue(UserIdNotificationKey, out object userKey))
{
userId = (Guid)userKey;
var name = TryGetData(UserNameNotificationKey);
userName = name != null ? name.ToString() : "";
return true;
}
userName = "";
return false;
}
public bool HasTenantNotification(out Guid tenantId)
/// <summary>
/// 需要本地化
/// </summary>
/// <returns></returns>
public bool NeedLocalizer()
{
if (Properties.TryGetValue(TenantNotificationKey, out object tenantKey))
var localizer = TryGetData(LocalizerKey);
if (localizer != null && localizer is bool needLocalizer)
{
tenantId = (Guid)tenantKey;
return true;
return needLocalizer;
}
return false;
}

31
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationDataConverter.cs

@ -0,0 +1,31 @@
using Newtonsoft.Json;
namespace LINGYUN.Abp.Notifications
{
public class NotificationDataConverter
{
public static NotificationData Convert(NotificationData notificationData)
{
if (notificationData != null)
{
if (notificationData.NeedLocalizer())
{
var title = JsonConvert.DeserializeObject<LocalizableStringInfo>(notificationData.TryGetData("title").ToString());
var message = JsonConvert.DeserializeObject<LocalizableStringInfo>(notificationData.TryGetData("message").ToString());
notificationData.TrySetData("title", title);
notificationData.TrySetData("message", message);
if (notificationData.Properties.TryGetValue("description", out object description) && description != null)
{
notificationData.TrySetData("description", JsonConvert.DeserializeObject<LocalizableStringInfo>(description.ToString()));
}
}
}
else
{
notificationData = new NotificationData();
}
return notificationData;
}
}
}

14
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationDataMappingDictionary.cs

@ -6,13 +6,13 @@ namespace LINGYUN.Abp.Notifications
{
public class NotificationDataMappingDictionary : Dictionary<string, List<NotificationDataMappingDictionaryItem>>
{
public void Mapping(string cateGory, string provider, Func<NotificationData, NotificationData> func)
public void Mapping(string name, string provider, Func<NotificationData, NotificationData> func)
{
if (ContainsKey(cateGory))
if (ContainsKey(name))
{
this[cateGory] = new List<NotificationDataMappingDictionaryItem>();
this[name] = new List<NotificationDataMappingDictionaryItem>();
}
this[cateGory].Add(new NotificationDataMappingDictionaryItem(provider, func));
this[name].Add(new NotificationDataMappingDictionaryItem(provider, func));
}
public void MappingAll(string provider, Func<NotificationData, NotificationData> func)
@ -23,11 +23,11 @@ namespace LINGYUN.Abp.Notifications
}
}
public NotificationDataMappingDictionaryItem GetMapItemOrNull(string cateGory, string provider)
public NotificationDataMappingDictionaryItem GetMapItemOrNull(string name, string provider)
{
if (ContainsKey(cateGory))
if (ContainsKey(name))
{
return this[cateGory].FirstOrDefault(map => map.Provider.Equals(provider));
return this[name].FirstOrDefault(map => map.Provider.Equals(provider));
}
return null;
}

27
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationDefinition.cs

@ -3,17 +3,11 @@ using System;
using System.Collections.Generic;
using Volo.Abp;
using Volo.Abp.Localization;
using Volo.Abp.MultiTenancy;
/*
*
* ,,,Catalog
* Prefix
*
* TODO: 2020-08-26 ?
* 宿,
* NotificationData[FormUser]
* NotificationData[FormTenant]
* NotificationData[FormGlobal]
* 2020-10-29
* INotificationSender指定接收者,,,()
*/
namespace LINGYUN.Abp.Notifications
@ -21,10 +15,10 @@ namespace LINGYUN.Abp.Notifications
public class NotificationDefinition
{
/// <summary>
/// 通知类目
/// 通知名称
/// </summary>
[NotNull]
public string CateGory { get; set; }
public string Name { get; set; }
/// <summary>
/// 通知显示名称
/// </summary>
@ -58,15 +52,15 @@ namespace LINGYUN.Abp.Notifications
public List<string> Providers { get; }
public NotificationDefinition(
string category,
string name,
ILocalizableString displayName = null,
ILocalizableString description = null,
NotificationType notificationType = NotificationType.Application,
NotificationLifetime lifetime = NotificationLifetime.Persistent,
bool allowSubscriptionToClients = false)
{
CateGory = category;
DisplayName = displayName ?? new FixedLocalizableString(category);
Name = name;
DisplayName = displayName ?? new FixedLocalizableString(name);
Description = description;
NotificationLifetime = lifetime;
NotificationType = notificationType;
@ -84,5 +78,10 @@ namespace LINGYUN.Abp.Notifications
return this;
}
public override string ToString()
{
return $"[{nameof(NotificationDefinition)} {Name}]";
}
}
}

46
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationDefinitionContext.cs

@ -1,33 +1,57 @@
using System;
using JetBrains.Annotations;
using System.Collections.Generic;
using Volo.Abp;
using Volo.Abp.Localization;
using Volo.Abp.MultiTenancy;
namespace LINGYUN.Abp.Notifications
{
public class NotificationDefinitionContext : INotificationDefinitionContext
{
protected Dictionary<string, NotificationDefinition> Notifications { get; }
internal Dictionary<string, NotificationGroupDefinition> Groups { get; }
public NotificationDefinitionContext(Dictionary<string, NotificationDefinition> notifications)
public NotificationDefinitionContext()
{
Notifications = notifications;
Groups = new Dictionary<string, NotificationGroupDefinition>();
}
public void Add(params NotificationDefinition[] definitions)
public NotificationGroupDefinition AddGroup(
[NotNull] string name,
ILocalizableString displayName = null,
bool allowSubscriptionToClients = true)
{
if (definitions.IsNullOrEmpty())
Check.NotNull(name, nameof(name));
if (Groups.ContainsKey(name))
{
return;
throw new AbpException($"There is already an existing notification group with name: {name}");
}
foreach (var definition in definitions)
return Groups[name] = new NotificationGroupDefinition(name, displayName, allowSubscriptionToClients);
}
public NotificationGroupDefinition GetGroupOrNull(string name)
{
Check.NotNull(name, nameof(name));
if (!Groups.ContainsKey(name))
{
Notifications[definition.CateGory] = definition;
return null;
}
return Groups[name];
}
public NotificationDefinition GetOrNull(string category)
public void RemoveGroup(string name)
{
return Notifications.GetOrDefault(category);
Check.NotNull(name, nameof(name));
if (!Groups.ContainsKey(name))
{
throw new AbpException($"Undefined notification group: '{name}'.");
}
Groups.Remove(name);
}
}
}

78
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationDefinitionManager.cs

@ -1,5 +1,4 @@
using JetBrains.Annotations;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using System;
using System.Collections.Generic;
@ -12,51 +11,88 @@ namespace LINGYUN.Abp.Notifications
{
public class NotificationDefinitionManager : INotificationDefinitionManager, ISingletonDependency
{
protected Lazy<IDictionary<string, NotificationDefinition>> NotificationDefinitions { get; }
protected AbpNotificationOptions Options { get; }
protected IServiceProvider ServiceProvider { get; }
protected IDictionary<string, NotificationGroupDefinition> NotificationGroupDefinitions => _lazyNotificationGroupDefinitions.Value;
private readonly Lazy<Dictionary<string, NotificationGroupDefinition>> _lazyNotificationGroupDefinitions;
protected IDictionary<string, NotificationDefinition> NotificationDefinitions => _lazyNotificationDefinitions.Value;
private readonly Lazy<Dictionary<string, NotificationDefinition>> _lazyNotificationDefinitions;
private readonly IServiceScopeFactory _serviceScopeFactory;
public NotificationDefinitionManager(
IOptions<AbpNotificationOptions> options,
IServiceProvider serviceProvider)
IServiceScopeFactory serviceScopeFactory)
{
ServiceProvider = serviceProvider;
_serviceScopeFactory = serviceScopeFactory;
Options = options.Value;
NotificationDefinitions = new Lazy<IDictionary<string, NotificationDefinition>>(CreateNotificationDefinitions, true);
_lazyNotificationDefinitions = new Lazy<Dictionary<string, NotificationDefinition>>(
CreateNotificationDefinitions,
isThreadSafe: true
);
_lazyNotificationGroupDefinitions = new Lazy<Dictionary<string, NotificationGroupDefinition>>(
CreateNotificationGroupDefinitions,
isThreadSafe: true
);
}
public virtual NotificationDefinition Get([NotNull] string category)
public virtual NotificationDefinition Get(string name)
{
Check.NotNull(category, nameof(category));
Check.NotNull(name, nameof(name));
var notification = GetOrNull(category);
var feature = GetOrNull(name);
if (notification == null)
if (feature == null)
{
throw new AbpException("Undefined notification category: " + category);
throw new AbpException("Undefined notification: " + name);
}
return notification;
return feature;
}
public virtual IReadOnlyList<NotificationDefinition> GetAll()
{
return NotificationDefinitions.Value.Values.ToImmutableList();
return NotificationDefinitions.Values.ToImmutableList();
}
public virtual NotificationDefinition GetOrNull(string name)
{
return NotificationDefinitions.GetOrDefault(name);
}
public virtual NotificationDefinition GetOrNull(string category)
public IReadOnlyList<NotificationGroupDefinition> GetGroups()
{
return NotificationDefinitions.Value.GetOrDefault(category);
return NotificationGroupDefinitions.Values.ToImmutableList();
}
protected virtual IDictionary<string, NotificationDefinition> CreateNotificationDefinitions()
protected virtual Dictionary<string, NotificationDefinition> CreateNotificationDefinitions()
{
var notifications = new Dictionary<string, NotificationDefinition>();
using (var scope = ServiceProvider.CreateScope())
foreach (var groupDefinition in NotificationGroupDefinitions.Values)
{
foreach (var notification in groupDefinition.Notifications)
{
if (notifications.ContainsKey(notification.Name))
{
throw new AbpException("Duplicate notification name: " + notification.Name);
}
notifications[notification.Name] = notification;
}
}
return notifications;
}
protected virtual Dictionary<string, NotificationGroupDefinition> CreateNotificationGroupDefinitions()
{
var context = new NotificationDefinitionContext();
using (var scope = _serviceScopeFactory.CreateScope())
{
var providers = Options
.DefinitionProviders
@ -65,11 +101,11 @@ namespace LINGYUN.Abp.Notifications
foreach (var provider in providers)
{
provider.Define(new NotificationDefinitionContext(notifications));
provider.Define(context);
}
}
return notifications;
return context.Groups;
}
}
}

30
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationEventData.cs

@ -1,38 +1,20 @@
using System;
using System.Collections.Generic;
using Volo.Abp.MultiTenancy;
namespace LINGYUN.Abp.Notifications
{
public class NotificationEventData
public class NotificationEventData : IMultiTenant
{
public Guid? TenantId { get; set; }
public string CateGory { get; set; }
public string Name { get; set; }
public string Id { get; set; }
public NotificationData Data { get; set; }
public DateTime CreationTime { get; set; }
public NotificationLifetime Lifetime { get; set; }
public NotificationType NotificationType { get; set; }
public NotificationSeverity NotificationSeverity { get; set; }
public NotificationSeverity Severity { get; set; }
public List<UserIdentifier> Users { get; set; }
public NotificationEventData()
{
}
public NotificationInfo ToNotificationInfo()
{
return new NotificationInfo
{
NotificationSeverity = NotificationSeverity,
CreationTime = CreationTime,
Data = Data,
Id = Id,
Name = Name,
CateGory = CateGory,
NotificationType = NotificationType,
Lifetime = Lifetime,
TenantId = TenantId
};
Users = new List<UserIdentifier>();
}
}
}

70
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationGroupDefinition.cs

@ -0,0 +1,70 @@
using JetBrains.Annotations;
using System.Collections.Generic;
using System.Collections.Immutable;
using Volo.Abp;
using Volo.Abp.Localization;
using Volo.Abp.MultiTenancy;
namespace LINGYUN.Abp.Notifications
{
public class NotificationGroupDefinition
{
/// <summary>
/// 通知组名称
/// </summary>
[NotNull]
public string Name { get; set; }
/// <summary>
/// 通知组显示名称
/// </summary>
[NotNull]
public ILocalizableString DisplayName
{
get => _displayName;
set => _displayName = Check.NotNull(value, nameof(value));
}
private ILocalizableString _displayName;
/// <summary>
/// 通知组说明
/// </summary>
[CanBeNull]
public ILocalizableString Description { get; set; }
public bool AllowSubscriptionToClients { get; set; }
public IReadOnlyList<NotificationDefinition> Notifications => _notifications.ToImmutableList();
private readonly List<NotificationDefinition> _notifications;
protected internal NotificationGroupDefinition(
string name,
ILocalizableString displayName = null,
bool allowSubscriptionToClients = false)
{
Name = name;
DisplayName = displayName ?? new FixedLocalizableString(Name);
AllowSubscriptionToClients = allowSubscriptionToClients;
_notifications = new List<NotificationDefinition>();
}
public virtual NotificationDefinition AddNotification(
string name,
ILocalizableString displayName = null,
ILocalizableString description = null,
NotificationType notificationType = NotificationType.Application,
NotificationLifetime lifetime = NotificationLifetime.Persistent,
bool allowSubscriptionToClients = false)
{
var notification = new NotificationDefinition(
name,
displayName,
description,
notificationType,
lifetime,
allowSubscriptionToClients
);
_notifications.Add(notification);
return notification;
}
}
}

30
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationInfo.cs

@ -6,53 +6,33 @@ namespace LINGYUN.Abp.Notifications
{
public Guid? TenantId { get; set; }
public string Name { get; set; }
public string CateGory { get; set; }
public string Id { get; set; }
public NotificationData Data { get; set; }
public DateTime CreationTime { get; set; }
public NotificationLifetime Lifetime { get; set; }
public NotificationType NotificationType { get; set; }
public NotificationSeverity NotificationSeverity { get; set; }
public NotificationType Type { get; set; }
public NotificationSeverity Severity { get; set; }
public NotificationInfo()
{
Data = new NotificationData();
Lifetime = NotificationLifetime.Persistent;
NotificationType = NotificationType.Application;
NotificationSeverity = NotificationSeverity.Info;
Type = NotificationType.Application;
Severity = NotificationSeverity.Info;
CreationTime = DateTime.Now;
}
public long SetId(long id)
public void SetId(long id)
{
if (Id.IsNullOrWhiteSpace())
{
Id = id.ToString();
return id;
}
return GetId();
}
public long GetId()
{
return long.Parse(Id);
}
public NotificationEventData ToNotificationEventData()
{
return new NotificationEventData
{
NotificationSeverity = NotificationSeverity,
CreationTime = CreationTime,
Data = Data,
Id = Id,
Name = Name,
CateGory = CateGory,
Lifetime = Lifetime,
NotificationType = NotificationType,
TenantId = TenantId
};
}
}
}

14
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationName.cs

@ -1,14 +0,0 @@
namespace LINGYUN.Abp.Notifications
{
public class NotificationName
{
public string CateGory { get; }
public string Name { get; }
public NotificationName(string cateGory, string name)
{
Name = name;
CateGory = cateGory;
}
}
}

15
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationNameNormalizer.cs

@ -1,15 +0,0 @@
namespace LINGYUN.Abp.Notifications
{
public static class NotificationNameNormalizer
{
public static NotificationName NormalizerName(string name)
{
return new NotificationName(name, name);
}
public static NotificationName NormalizerName(string category, string name)
{
var notifyName = string.Concat(category, ":", name);
return new NotificationName(category, notifyName);
}
}
}

4
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationPublishJob.cs

@ -30,8 +30,10 @@ namespace LINGYUN.Abp.Notifications
if (ServiceProvider.GetRequiredService(providerType) is INotificationPublishProvider publishProvider)
{
var notification = await Store.GetNotificationOrNullAsync(args.TenantId, args.NotificationId);
notification.Data = NotificationDataConverter.Convert(notification.Data);
var notifacationDataMapping = Options.NotificationDataMappings
.GetMapItemOrNull(publishProvider.Name, notification.CateGory);
.GetMapItemOrNull(notification.Name, publishProvider.Name);
if (notifacationDataMapping != null)
{
notification.Data = notifacationDataMapping.MappingFunc(notification.Data);

12
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NotificationPublishProvider.cs

@ -3,8 +3,10 @@ using Microsoft.Extensions.Logging;
using Microsoft.Extensions.Logging.Abstractions;
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Threading;
namespace LINGYUN.Abp.Notifications
{
@ -39,11 +41,19 @@ namespace LINGYUN.Abp.Notifications
return reference;
}
public ICancellationTokenProvider CancellationTokenProvider { get; set; }
protected NotificationPublishProvider(IServiceProvider serviceProvider)
{
ServiceProvider = serviceProvider;
CancellationTokenProvider = NullCancellationTokenProvider.Instance;
}
public async Task PublishAsync(NotificationInfo notification, IEnumerable<UserIdentifier> identifiers)
{
await PublishAsync(notification, identifiers, CancellationTokenProvider.Token);
}
public abstract Task PublishAsync(NotificationInfo notification, IEnumerable<UserIdentifier> identifiers);
protected abstract Task PublishAsync(NotificationInfo notification, IEnumerable<UserIdentifier> identifiers, CancellationToken cancellationToken = default);
}
}

123
aspnet-core/modules/common/LINGYUN.Abp.Notifications/LINGYUN/Abp/Notifications/NullNotificationStore.cs

@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp.DependencyInjection;
@ -9,92 +10,178 @@ namespace LINGYUN.Abp.Notifications
[ExposeServices(typeof(INotificationStore))]
public class NullNotificationStore : INotificationStore
{
public Task ChangeUserNotificationReadStateAsync(Guid? tenantId, Guid userId, long notificationId, NotificationReadState readState)
public Task ChangeUserNotificationReadStateAsync(
Guid? tenantId,
Guid userId,
long notificationId,
NotificationReadState readState,
CancellationToken cancellationToken = default)
{
return Task.CompletedTask;
}
public Task DeleteAllUserSubscriptionAsync(Guid? tenantId, string notificationName)
public Task DeleteAllUserSubscriptionAsync(
Guid? tenantId,
string notificationName,
CancellationToken cancellationToken = default)
{
return Task.CompletedTask;
}
public Task DeleteNotificationAsync(NotificationInfo notification)
public Task DeleteNotificationAsync(
NotificationInfo notification,
CancellationToken cancellationToken = default)
{
return Task.CompletedTask;
}
public Task DeleteNotificationAsync(int batchCount)
public Task DeleteNotificationAsync(
int batchCount,
CancellationToken cancellationToken = default)
{
return Task.CompletedTask;
}
public Task DeleteUserNotificationAsync(Guid? tenantId, Guid userId, long notificationId)
public Task DeleteUserNotificationAsync(
Guid? tenantId,
Guid userId,
long notificationId,
CancellationToken cancellationToken = default)
{
return Task.CompletedTask;
}
public Task DeleteUserSubscriptionAsync(Guid? tenantId, Guid userId, string notificationName)
public Task DeleteUserSubscriptionAsync(
Guid? tenantId,
Guid userId,
string notificationName,
CancellationToken cancellationToken = default)
{
return Task.CompletedTask;
}
public Task DeleteUserSubscriptionAsync(Guid? tenantId, IEnumerable<UserIdentifier> identifiers, string notificationName)
public Task DeleteUserSubscriptionAsync(
Guid? tenantId,
IEnumerable<UserIdentifier> identifiers,
string notificationName,
CancellationToken cancellationToken = default)
{
return Task.CompletedTask;
}
public Task<NotificationInfo> GetNotificationOrNullAsync(Guid? tenantId, long notificationId)
public Task<NotificationInfo> GetNotificationOrNullAsync(
Guid? tenantId,
long notificationId,
CancellationToken cancellationToken = default)
{
return Task.FromResult(new NotificationInfo());
}
public Task<List<NotificationSubscriptionInfo>> GetSubscriptionsAsync(Guid? tenantId, string notificationName)
public Task<List<NotificationSubscriptionInfo>> GetUserSubscriptionsAsync(
Guid? tenantId,
string notificationName,
IEnumerable<UserIdentifier> identifiers,
CancellationToken cancellationToken = default)
{
return Task.FromResult(new List<NotificationSubscriptionInfo>());
}
public Task<List<NotificationInfo>> GetUserNotificationsAsync(Guid? tenantId, Guid userId, NotificationReadState readState = NotificationReadState.UnRead, int maxResultCount = 10)
public Task<List<NotificationInfo>> GetUserNotificationsAsync(
Guid? tenantId,
Guid userId,
NotificationReadState readState = NotificationReadState.UnRead,
int maxResultCount = 10,
CancellationToken cancellationToken = default)
{
return Task.FromResult(new List<NotificationInfo>());
}
public Task<List<NotificationSubscriptionInfo>> GetUserSubscriptionsAsync(Guid? tenantId, Guid userId)
public Task<int> GetUserNotificationsCountAsync(
Guid? tenantId,
Guid userId,
string filter = "",
NotificationReadState readState = NotificationReadState.UnRead,
CancellationToken cancellationToken = default)
{
return Task.FromResult(0);
}
public Task<List<NotificationInfo>> GetUserNotificationsAsync(
Guid? tenantId,
Guid userId,
string filter = "",
string sorting = nameof(NotificationInfo.CreationTime),
bool reverse = true,
NotificationReadState readState = NotificationReadState.UnRead,
int skipCount = 1,
int maxResultCount = 10,
CancellationToken cancellationToken = default)
{
return Task.FromResult(new List<NotificationInfo>());
}
public Task<List<NotificationSubscriptionInfo>> GetUserSubscriptionsAsync(
Guid? tenantId,
Guid userId,
CancellationToken cancellationToken = default)
{
return Task.FromResult(new List<NotificationSubscriptionInfo>());
}
public Task<List<NotificationSubscriptionInfo>> GetUserSubscriptionsAsync(Guid? tenantId, string userName)
public Task<List<NotificationSubscriptionInfo>> GetUserSubscriptionsAsync(
Guid? tenantId,
string userName,
CancellationToken cancellationToken = default)
{
return Task.FromResult(new List<NotificationSubscriptionInfo>());
}
public Task InsertNotificationAsync(NotificationInfo notification)
public Task InsertNotificationAsync(
NotificationInfo notification,
CancellationToken cancellationToken = default)
{
return Task.CompletedTask;
}
public Task InsertUserNotificationAsync(NotificationInfo notification, Guid userId)
public Task InsertUserNotificationAsync(
NotificationInfo notification,
Guid userId,
CancellationToken cancellationToken = default)
{
return Task.CompletedTask;
}
public Task InsertUserNotificationsAsync(NotificationInfo notification, IEnumerable<Guid> userIds)
public Task InsertUserNotificationsAsync(
NotificationInfo notification,
IEnumerable<Guid> userIds,
CancellationToken cancellationToken = default)
{
return Task.CompletedTask;
}
public Task InsertUserSubscriptionAsync(Guid? tenantId, UserIdentifier identifier, string notificationName)
public Task InsertUserSubscriptionAsync(
Guid? tenantId,
UserIdentifier identifier,
string notificationName,
CancellationToken cancellationToken = default)
{
return Task.CompletedTask;
}
public Task InsertUserSubscriptionAsync(Guid? tenantId, IEnumerable<UserIdentifier> identifiers, string notificationName)
public Task InsertUserSubscriptionAsync(
Guid? tenantId,
IEnumerable<UserIdentifier> identifiers,
string notificationName,
CancellationToken cancellationToken = default)
{
return Task.CompletedTask;
}
public Task<bool> IsSubscribedAsync(Guid? tenantId, Guid userId, string notificationName)
public Task<bool> IsSubscribedAsync(
Guid? tenantId,
Guid userId,
string notificationName,
CancellationToken cancellationToken = default)
{
return Task.FromResult(false);
}

18
aspnet-core/modules/common/LINGYUN.Abp.RealTime.SignalR/LINGYUN.Abp.RealTime.SignalR.csproj

@ -0,0 +1,18 @@
<Project Sdk="Microsoft.NET.Sdk">
<Import Project="..\..\..\common.props" />
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<RootNamespace />
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Volo.Abp.AspNetCore.SignalR" Version="3.2.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\LINGYUN.Abp.RealTime\LINGYUN.Abp.RealTime.csproj" />
</ItemGroup>
</Project>

12
aspnet-core/modules/common/LINGYUN.Abp.RealTime.SignalR/LINGYUN/Abp/RealTime/SignalR/AbpRealTimeSignalRModule.cs

@ -0,0 +1,12 @@
using Volo.Abp.AspNetCore.SignalR;
using Volo.Abp.Modularity;
namespace LINGYUN.Abp.RealTime.SignalR
{
[DependsOn(
typeof(AbpRealTimeModule),
typeof(AbpAspNetCoreSignalRModule))]
public class AbpRealTimeSignalRModule : AbpModule
{
}
}

94
aspnet-core/modules/common/LINGYUN.Abp.RealTime.SignalR/LINGYUN/Abp/RealTime/SignalR/Hubs/OnlineClientHubBase.cs

@ -0,0 +1,94 @@
using LINGYUN.Abp.RealTime.Client;
using Microsoft.Extensions.Logging;
using System;
using System.Threading.Tasks;
using Volo.Abp.AspNetCore.SignalR;
using Volo.Abp.AspNetCore.WebClientInfo;
namespace LINGYUN.Abp.RealTime.SignalR
{
public abstract class OnlineClientHubBase : AbpHub, IClient
{
private IWebClientInfoProvider _webClientInfoProvider;
protected IWebClientInfoProvider WebClientInfoProvider => LazyGetRequiredService(ref _webClientInfoProvider);
private IOnlineClientManager _onlineClientManager;
protected IOnlineClientManager OnlineClientManager => LazyGetRequiredService(ref _onlineClientManager);
public override async Task OnConnectedAsync()
{
await base.OnConnectedAsync();
IOnlineClient onlineClient = CreateClientForCurrentConnection();
await OnConnectedAsync(onlineClient);
}
public virtual async Task OnConnectedAsync(IOnlineClient client)
{
Logger.LogDebug("A client is connected: " + client.ToString());
OnlineClientManager.Add(client);
await OnClientConnectedAsync(client);
}
public override async Task OnDisconnectedAsync(Exception exception)
{
// 从通讯组移除
var onlineClient = OnlineClientManager.GetByConnectionIdOrNull(Context.ConnectionId);
await OnDisconnectedAsync(onlineClient);
await base.OnDisconnectedAsync(exception);
}
public virtual async Task OnDisconnectedAsync(IOnlineClient client)
{
if (client != null)
{
try
{
Logger.LogDebug("A client is disconnected: " + client);
// 移除在线客户端
OnlineClientManager.Remove(Context.ConnectionId);
await OnClientDisconnectedAsync(client);
}
catch (Exception ex)
{
Logger.LogWarning(ex.ToString(), ex);
}
}
}
protected virtual IOnlineClient CreateClientForCurrentConnection()
{
return new OnlineClient(
Context.ConnectionId,
WebClientInfoProvider.ClientIpAddress,
CurrentTenant.Id,
CurrentUser.Id)
{
ConnectTime = Clock.Now,
UserName = CurrentUser.UserName,
UserAccount = CurrentUser.UserName,
Roles = CurrentUser.Roles ?? new string[0],
Properties = Context.Items
};
}
protected virtual async Task OnClientConnectedAsync(IOnlineClient client)
{
// 角色添加进组
foreach (var role in client.Roles)
{
await Groups.AddToGroupAsync(client.ConnectionId, role);
}
}
protected virtual async Task OnClientDisconnectedAsync(IOnlineClient client)
{
// 角色添加进组
foreach (var role in client.Roles)
{
await Groups.RemoveFromGroupAsync(client.ConnectionId, role);
}
}
}
}

10
aspnet-core/modules/common/LINGYUN.Abp.RealTime/LINGYUN/Abp/RealTime/Client/IClient.cs

@ -0,0 +1,10 @@
using System.Threading.Tasks;
namespace LINGYUN.Abp.RealTime.Client
{
public interface IClient
{
Task OnConnectedAsync(IOnlineClient client);
Task OnDisconnectedAsync(IOnlineClient client);
}
}

6
aspnet-core/modules/common/LINGYUN.Abp.RealTime/LINGYUN/Abp/RealTime/Client/IOnlineClient.cs

@ -19,8 +19,10 @@ namespace LINGYUN.Abp.RealTime.Client
DateTime ConnectTime { get; }
object this[string key] { get; set; }
string[] Roles { get; }
Dictionary<string, object> Properties { get; }
object this[object key] { get; set; }
IDictionary<object, object> Properties { get; }
}
}

3
aspnet-core/modules/common/LINGYUN.Abp.RealTime/LINGYUN/Abp/RealTime/Client/IOnlineClientManager.cs

@ -1,6 +1,7 @@
using JetBrains.Annotations;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
namespace LINGYUN.Abp.RealTime.Client
{
@ -22,6 +23,8 @@ namespace LINGYUN.Abp.RealTime.Client
IReadOnlyList<IOnlineClient> GetAllClients();
IReadOnlyList<IOnlineClient> GetAllClients(Expression<Func<IOnlineClient, bool>> predicate);
IReadOnlyList<IOnlineClient> GetAllByContext([NotNull] OnlineClientContext context);
}
}

6
aspnet-core/modules/common/LINGYUN.Abp.RealTime/LINGYUN/Abp/RealTime/Client/IOnlineClientStore.cs

@ -1,4 +1,6 @@
using System.Collections.Generic;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
namespace LINGYUN.Abp.RealTime.Client
{
@ -15,5 +17,7 @@ namespace LINGYUN.Abp.RealTime.Client
bool Contains(string connectionId);
IReadOnlyList<IOnlineClient> GetAll();
IReadOnlyList<IOnlineClient> GetAll(Expression<Func<IOnlineClient, bool>> predicate);
}
}

12
aspnet-core/modules/common/LINGYUN.Abp.RealTime/LINGYUN/Abp/RealTime/Client/InMemoryOnlineClientStore.cs

@ -1,6 +1,9 @@
using System.Collections.Concurrent;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using System.Linq.Expressions;
using Volo.Abp.DependencyInjection;
namespace LINGYUN.Abp.RealTime.Client
@ -43,5 +46,12 @@ namespace LINGYUN.Abp.RealTime.Client
{
return Clients.Values.ToImmutableList();
}
public IReadOnlyList<IOnlineClient> GetAll(Expression<Func<IOnlineClient, bool>> predicate)
{
return Clients.Values
.Where(predicate.Compile())
.ToImmutableList();
}
}
}

11
aspnet-core/modules/common/LINGYUN.Abp.RealTime/LINGYUN/Abp/RealTime/Client/OnlineClient.cs

@ -6,7 +6,7 @@ namespace LINGYUN.Abp.RealTime.Client
[Serializable]
public class OnlineClient : IOnlineClient
{
public object this[string key]
public object this[object key]
{
get { return Properties[key]; }
set { Properties[key] = value; }
@ -23,10 +23,12 @@ namespace LINGYUN.Abp.RealTime.Client
public string UserName { get; set; }
public string[] Roles { get; set; }
public DateTime ConnectTime { get; set; }
private Dictionary<string, object> _properties;
public Dictionary<string, object> Properties
private IDictionary<object, object> _properties;
public IDictionary<object, object> Properties
{
get { return _properties; }
set
@ -53,7 +55,8 @@ namespace LINGYUN.Abp.RealTime.Client
TenantId = tenantId;
UserId = userId;
Properties = new Dictionary<string, object>();
Roles = new string[0];
Properties = new Dictionary<object, object>();
}
public override string ToString()

11
aspnet-core/modules/common/LINGYUN.Abp.RealTime/LINGYUN/Abp/RealTime/Client/OnlineClientManager.cs

@ -3,6 +3,7 @@ using System;
using System.Collections.Generic;
using System.Collections.Immutable;
using System.Linq;
using System.Linq.Expressions;
using Volo.Abp;
using Volo.Abp.DependencyInjection;
@ -89,10 +90,12 @@ namespace LINGYUN.Abp.RealTime.Client
public virtual IReadOnlyList<IOnlineClient> GetAllClients()
{
lock (SyncObj)
{
return Store.GetAll();
}
return Store.GetAll();
}
public virtual IReadOnlyList<IOnlineClient> GetAllClients(Expression<Func<IOnlineClient, bool>> predicate)
{
return Store.GetAll(predicate);
}
[NotNull]

9
aspnet-core/modules/common/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/OpenId/IWeChatOpenIdFinder.cs

@ -1,9 +0,0 @@
using System.Threading.Tasks;
namespace LINGYUN.Abp.WeChat.Authorization
{
public interface IWeChatOpenIdFinder
{
Task<WeChatOpenId> FindAsync(string code);
}
}

9
aspnet-core/modules/common/LINGYUN.Abp.WeChat.Authorization/LINGYUN/Abp/WeChat/Authorization/Token/IWeChatTokenProvider.cs

@ -1,9 +0,0 @@
using System.Threading.Tasks;
namespace LINGYUN.Abp.WeChat.Authorization
{
public interface IWeChatTokenProvider
{
Task<WeChatToken> GetTokenAsync();
}
}

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save