committed by
GitHub
304 changed files with 12577 additions and 3040 deletions
@ -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 |
|||
@ -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 |
|||
@ -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 |
|||
@ -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 |
|||
@ -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 |
|||
@ -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 |
|||
@ -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 |
|||
File diff suppressed because one or more lines are too long
@ -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> |
|||
@ -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>()); |
|||
} |
|||
} |
|||
} |
|||
@ -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> |
|||
@ -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}"); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -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,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); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
{ |
|||
"culture": "en", |
|||
"texts": { |
|||
"Notifications:Exception": "Exception", |
|||
"Notifications:ExceptionNotifier": "Exception Notifier" |
|||
} |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
{ |
|||
"culture": "zh-Hans", |
|||
"texts": { |
|||
"Notifications:Exception": "异常通知", |
|||
"Notifications:ExceptionNotifier": "异常推送" |
|||
} |
|||
} |
|||
@ -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"); |
|||
}); |
|||
} |
|||
} |
|||
} |
|||
|
|||
@ -0,0 +1,9 @@ |
|||
using Volo.Abp.Localization; |
|||
|
|||
namespace LINGYUN.Abp.ExceptionHandling.Localization |
|||
{ |
|||
[LocalizationResourceName("AbpExceptionHandling")] |
|||
public class ExceptionHandlingResource |
|||
{ |
|||
} |
|||
} |
|||
@ -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"); |
|||
}); |
|||
} |
|||
} |
|||
} |
|||
|
|||
@ -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); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -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); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -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); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -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); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -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; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,10 @@ |
|||
using Volo.Abp.EventBus; |
|||
using Volo.Abp.Modularity; |
|||
|
|||
namespace LINGYUN.Abp.IM |
|||
{ |
|||
[DependsOn(typeof(AbpEventBusModule))] |
|||
public class AbpIMModule : AbpModule |
|||
{ |
|||
} |
|||
} |
|||
@ -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>(); |
|||
} |
|||
} |
|||
} |
|||
@ -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); |
|||
} |
|||
} |
|||
@ -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; |
|||
} |
|||
} |
|||
} |
|||
@ -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; |
|||
} |
|||
} |
|||
} |
|||
@ -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); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,14 @@ |
|||
namespace LINGYUN.Abp.IM.Contract |
|||
{ |
|||
public enum UserFriendStatus : byte |
|||
{ |
|||
/// <summary>
|
|||
/// 需要验证
|
|||
/// </summary>
|
|||
NeedValidation, |
|||
/// <summary>
|
|||
/// 已添加
|
|||
/// </summary>
|
|||
Added |
|||
} |
|||
} |
|||
@ -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); |
|||
} |
|||
} |
|||
} |
|||
|
|||
@ -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); |
|||
} |
|||
} |
|||
@ -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(""); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
@ -0,0 +1,10 @@ |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace LINGYUN.Abp.IM.Messages |
|||
{ |
|||
public interface IMessageSenderProvider |
|||
{ |
|||
string Name { get; } |
|||
Task SendMessageAsync(ChatMessage chatMessage); |
|||
} |
|||
} |
|||
@ -0,0 +1,9 @@ |
|||
using System.Collections.Generic; |
|||
|
|||
namespace LINGYUN.Abp.IM.Messages |
|||
{ |
|||
public interface IMessageSenderProviderManager |
|||
{ |
|||
List<IMessageSenderProvider> Providers { get; } |
|||
} |
|||
} |
|||
@ -0,0 +1,9 @@ |
|||
namespace LINGYUN.Abp.IM.Messages |
|||
{ |
|||
/// <summary>
|
|||
/// 上一次通讯消息
|
|||
/// </summary>
|
|||
public class LastChatMessage : ChatMessage |
|||
{ |
|||
} |
|||
} |
|||
@ -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); |
|||
} |
|||
} |
|||
} |
|||
@ -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); |
|||
} |
|||
} |
|||
@ -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 |
|||
); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,9 @@ |
|||
namespace LINGYUN.Abp.IM |
|||
{ |
|||
public enum Sex |
|||
{ |
|||
Male, |
|||
Female, |
|||
Other |
|||
} |
|||
} |
|||
@ -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; |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -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); |
|||
} |
|||
} |
|||
} |
|||
@ -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); |
|||
} |
|||
} |
|||
|
|||
@ -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); |
|||
} |
|||
} |
|||
@ -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); |
|||
} |
|||
} |
|||
|
|||
@ -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)); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -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 |
|||
}); |
|||
} |
|||
} |
|||
} |
|||
@ -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; |
|||
} |
|||
} |
|||
} |
|||
@ -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; |
|||
} |
|||
} |
|||
} |
|||
@ -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); |
|||
} |
|||
} |
|||
} |
|||
|
|||
@ -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>(); |
|||
} |
|||
} |
|||
} |
|||
|
|||
@ -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; |
|||
} |
|||
} |
|||
} |
|||
@ -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; |
|||
} |
|||
} |
|||
} |
|||
@ -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); |
|||
} |
|||
} |
|||
} |
|||
@ -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> |
|||
@ -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 |
|||
{ |
|||
} |
|||
} |
|||
@ -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); |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,10 @@ |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace LINGYUN.Abp.RealTime.Client |
|||
{ |
|||
public interface IClient |
|||
{ |
|||
Task OnConnectedAsync(IOnlineClient client); |
|||
Task OnDisconnectedAsync(IOnlineClient client); |
|||
} |
|||
} |
|||
@ -1,9 +0,0 @@ |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace LINGYUN.Abp.WeChat.Authorization |
|||
{ |
|||
public interface IWeChatOpenIdFinder |
|||
{ |
|||
Task<WeChatOpenId> FindAsync(string code); |
|||
} |
|||
} |
|||
@ -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…
Reference in new issue