Skip to content

Commit 603bc2c

Browse files
committed
feat: 新增 事件总线类库
1 parent 7e88c8a commit 603bc2c

26 files changed

+1252
-119
lines changed

framework/src/Bing.AspNetCore.Mvc.UI/Bing/AspNetCore/Mvc/UI/RazorPages/DefaultRazorHtmlGenerator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
using System.Threading.Tasks;
44
using Bing.DependencyInjection;
55
using Bing.Extensions;
6-
using Bing.Helpers;
6+
using Bing.IO;
77
using Bing.Logs;
88
using Microsoft.AspNetCore.Http;
99
using Microsoft.AspNetCore.Mvc;

framework/src/Bing.AspNetCore/Uploads/DefaultFileUploadService.cs

Lines changed: 16 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@
77
using System.Threading.Tasks;
88
using Bing.AspNetCore.Uploads.Params;
99
using Bing.Exceptions;
10+
using Bing.IO;
1011
using Microsoft.AspNetCore.Http;
11-
using FileInfo = Bing.Utils.Files.FileInfo;
1212

1313
namespace Bing.AspNetCore.Uploads
1414
{
@@ -22,20 +22,16 @@ internal class DefaultFileUploadService : IFileUploadService
2222
/// </summary>
2323
/// <param name="param">参数</param>
2424
/// <param name="cancellationToken">取消令牌</param>
25-
public async Task<FileInfo> UploadAsync(SingleFileUploadParam param, CancellationToken cancellationToken = default(CancellationToken))
25+
public async Task<FileDescriptor> UploadAsync(SingleFileUploadParam param, CancellationToken cancellationToken = default(CancellationToken))
2626
{
2727
if (param.FormFile == null || param.FormFile.Length < 1)
2828
{
2929
if (param.Request.Form.Files != null && param.Request.Form.Files.Any())
30-
{
3130
param.FormFile = param.Request.Form.Files[0];
32-
}
3331
}
3432

3533
if (param.FormFile == null || param.FormFile.Length < 1)
36-
{
3734
throw new Warning("请选择文件!");
38-
}
3935

4036
return await SaveAsync(param.FormFile, param.RelativePath, param.RootPath, cancellationToken);
4137
}
@@ -47,7 +43,7 @@ internal class DefaultFileUploadService : IFileUploadService
4743
/// <param name="relativePath">相对路径</param>
4844
/// <param name="rootPath">根路径</param>
4945
/// <param name="cancellationToken">取消令牌</param>
50-
private async Task<FileInfo> SaveAsync(IFormFile formFile, string relativePath, string rootPath,
46+
private async Task<FileDescriptor> SaveAsync(IFormFile formFile, string relativePath, string rootPath,
5147
CancellationToken cancellationToken = default(CancellationToken))
5248
{
5349
var date = DateTime.Now;
@@ -57,16 +53,18 @@ private async Task<FileInfo> SaveAsync(IFormFile formFile, string relativePath,
5753
var path = System.IO.Path.Combine(relativePath, date.ToString("yyyy"), date.ToString("MM"),
5854
date.ToString("dd"));
5955
var id = Guid.NewGuid();
60-
var fileInfo = new FileInfo(path, size, name, id.ToString());
61-
fileInfo.SaveName = $"{id.ToString().Replace("-", "")}.{fileInfo.Extension}";
62-
63-
var fullDir = System.IO.Path.Combine(rootPath, fileInfo.Path);
64-
if (!Directory.Exists(fullDir))
56+
var fileInfo = new FileDescriptor(name, size)
6557
{
58+
Id = id.ToString(),
59+
DirectoryName = path,
60+
};
61+
fileInfo.StorageName = $"{id.ToString().Replace("-", "")}.{fileInfo.Extension}";
62+
63+
var fullDir = System.IO.Path.Combine(rootPath, fileInfo.DirectoryName);
64+
if (!Directory.Exists(fullDir))
6665
Directory.CreateDirectory(fullDir);
67-
}
6866

69-
var fullPath = Path.Combine(fullDir, fileInfo.SaveName);
67+
var fullPath = Path.Combine(fullDir, fileInfo.StorageName);
7068
fileInfo.Md5 = await SaveWithMd5Async(formFile, fullPath, cancellationToken);
7169
return fileInfo;
7270
}
@@ -76,7 +74,7 @@ private async Task<FileInfo> SaveAsync(IFormFile formFile, string relativePath,
7674
/// </summary>
7775
/// <param name="param">参数</param>
7876
/// <param name="cancellationToken">取消令牌</param>
79-
public async Task<IEnumerable<FileInfo>> UploadAsync(MultipleFileUploadParam param, CancellationToken cancellationToken = default(CancellationToken))
77+
public async Task<IEnumerable<FileDescriptor>> UploadAsync(MultipleFileUploadParam param, CancellationToken cancellationToken = default(CancellationToken))
8078
{
8179
if (param.FormFiles == null || !param.FormFiles.Any())
8280
{
@@ -91,7 +89,7 @@ private async Task<FileInfo> SaveAsync(IFormFile formFile, string relativePath,
9189
throw new Warning("请选择文件!");
9290
}
9391

94-
var tasks = new List<Task<FileInfo>>();
92+
var tasks = new List<Task<FileDescriptor>>();
9593
foreach (var formFile in param.FormFiles)
9694
{
9795
tasks.Add(SaveAsync(formFile, param.RelativePath, param.RootPath, cancellationToken));
@@ -140,14 +138,10 @@ public async Task<string> SaveWithMd5Async(IFormFile formFile, string savePath,
140138
private static string Md5(Stream stream)
141139
{
142140
if (stream == null)
143-
{
144141
return string.Empty;
145-
}
146142

147-
using (var md5Hash = MD5.Create())
148-
{
149-
return BitConverter.ToString(md5Hash.ComputeHash(stream)).Replace("-", "");
150-
}
143+
using var md5Hash = MD5.Create();
144+
return BitConverter.ToString(md5Hash.ComputeHash(stream)).Replace("-", "");
151145
}
152146
}
153147
}

framework/src/Bing.AspNetCore/Uploads/IFileUploadService.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
using System.Threading;
33
using System.Threading.Tasks;
44
using Bing.AspNetCore.Uploads.Params;
5-
using Bing.Utils.Files;
5+
using Bing.IO;
66
using Microsoft.AspNetCore.Http;
77

88
namespace Bing.AspNetCore.Uploads
@@ -17,14 +17,14 @@ public interface IFileUploadService
1717
/// </summary>
1818
/// <param name="param">参数</param>
1919
/// <param name="cancellationToken">取消令牌</param>
20-
Task<FileInfo> UploadAsync(SingleFileUploadParam param, CancellationToken cancellationToken = default(CancellationToken));
20+
Task<FileDescriptor> UploadAsync(SingleFileUploadParam param, CancellationToken cancellationToken = default(CancellationToken));
2121

2222
/// <summary>
2323
/// 上传文件。多文件
2424
/// </summary>
2525
/// <param name="param">参数</param>
2626
/// <param name="cancellationToken">取消令牌</param>
27-
Task<IEnumerable<FileInfo>> UploadAsync(MultipleFileUploadParam param, CancellationToken cancellationToken = default(CancellationToken));
27+
Task<IEnumerable<FileDescriptor>> UploadAsync(MultipleFileUploadParam param, CancellationToken cancellationToken = default(CancellationToken));
2828

2929
/// <summary>
3030
/// 保存文件

framework/src/Bing.EventBus/Bing.EventBus.csproj

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,4 @@
55

66
<Import Project="..\..\..\framework.props" />
77

8-
<ItemGroup>
9-
<Folder Include="Bing\EventBus\Distributed\" />
10-
</ItemGroup>
11-
128
</Project>
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using System;
2+
using System.Threading.Tasks;
3+
using Bing.DependencyInjection;
4+
using Bing.EventBus.Local;
5+
6+
namespace Bing.EventBus
7+
{
8+
/// <summary>
9+
/// 函数操作事件处理器
10+
/// </summary>
11+
/// <typeparam name="TEvent">事件类型</typeparam>
12+
public class ActionEventHandler<TEvent> : ILocalEventHandler<TEvent>, ITransientDependency where TEvent : class
13+
{
14+
/// <summary>
15+
/// 函数操作
16+
/// </summary>
17+
public Func<TEvent, Task> Action { get; }
18+
19+
/// <summary>
20+
/// 初始化一个<see cref="ActionEventHandler{TEvent}"/>类型的实例
21+
/// </summary>
22+
/// <param name="handler">事件处理</param>
23+
public ActionEventHandler(Func<TEvent, Task> handler) => Action = handler;
24+
25+
/// <summary>
26+
/// 处理事件
27+
/// </summary>
28+
/// <param name="eventData">事件数据</param>
29+
public async Task HandleAsync(TEvent eventData)
30+
{
31+
await Action(eventData);
32+
}
33+
}
34+
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using System;
2+
using System.Threading.Tasks;
3+
4+
namespace Bing.EventBus.Distributed
5+
{
6+
/// <summary>
7+
/// 分布式事件总线
8+
/// </summary>
9+
public interface IDistributedEventBus : IEventBus
10+
{
11+
/// <summary>
12+
/// 订阅事件
13+
/// </summary>
14+
/// <typeparam name="TEvent">事件类型</typeparam>
15+
/// <param name="handler">分布式事件处理器</param>
16+
IDisposable Subscribe<TEvent>(IDistributedEventHandler<TEvent> handler) where TEvent : class;
17+
18+
/// <summary>
19+
/// 发布事件
20+
/// </summary>
21+
/// <typeparam name="TEvent">事件类型</typeparam>
22+
/// <param name="eventData">事件数据</param>
23+
/// <param name="onUnitOfWorkComplete">是否在工作单元内提交</param>
24+
Task PublishAsync<TEvent>(TEvent eventData, bool onUnitOfWorkComplete = true) where TEvent : class;
25+
26+
/// <summary>
27+
/// 发布事件
28+
/// </summary>
29+
/// <param name="eventType">事件类型</param>
30+
/// <param name="eventData">事件数据</param>
31+
/// <param name="onUnitOfWorkComplete">是否在工作单元内提交</param>
32+
Task PublishAsync(Type eventType,object eventData, bool onUnitOfWorkComplete = true);
33+
}
34+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
using System.Threading.Tasks;
2+
3+
namespace Bing.EventBus.Distributed
4+
{
5+
/// <summary>
6+
/// 分布式事件处理器
7+
/// </summary>
8+
/// <typeparam name="TEvent">事件类型</typeparam>
9+
public interface IDistributedEventHandler<in TEvent> : IEventHandler
10+
{
11+
/// <summary>
12+
/// 处理事件
13+
/// </summary>
14+
/// <param name="eventData">事件数据</param>
15+
Task HandleEventAsync(TEvent eventData);
16+
}
17+
}

0 commit comments

Comments
 (0)