Learn.VideoAnalysis/VideoAnalysisCore/Common/UploadWorkflowManager.cs

81 lines
3.0 KiB
C#

using FreeRedis;
using Microsoft.Extensions.DependencyInjection;
using SqlSugar.IOC;
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using VideoAnalysisCore.AICore.FFMPGE;
using VideoAnalysisCore.Common.Expand;
using VideoAnalysisCore.Model;
using VideoAnalysisCore.Model.Enum;
namespace VideoAnalysisCore.Common
{
public static class UploadWorkflowExpand
{
public static void AddUploadWorkflow(this IServiceCollection services)
{
// 只有在配置启用时才注册
if (AppCommon.Config.Workflow.Upload.Enabled)
{
Console.WriteLine($"{DateTime.Now}=>初始化 视频合并工作流");
services.AddUploadExpand(); // Register UploadHandle
services.AddSingleton<UploadWorkflowManager>();
services.AddSingleton<UploadWorkflowInit>();
}
}
}
public class UploadWorkflowInit
{
private readonly UploadWorkflowManager _manager;
private readonly IServiceProvider _serviceProvider;
public UploadWorkflowInit(UploadWorkflowManager manager, IServiceProvider serviceProvider)
{
_manager = manager;
_serviceProvider = serviceProvider;
Init();
_manager.InitChannel();
}
public void Init()
{
var SubscribeList = _manager.SubscribeList;
SubscribeList.Add(RedisUploadChannelEnum., async (task) => await Task.CompletedTask);
SubscribeList.Add(RedisUploadChannelEnum., async (task) =>
{
using var scope = _serviceProvider.CreateScope();
var downloadService = scope.ServiceProvider.GetRequiredService<DownloadFile>();
await downloadService.RunTask(task);
});
SubscribeList.Add(RedisUploadChannelEnum., async (task) =>
{
using var scope = _serviceProvider.CreateScope();
var ffmpegService = scope.ServiceProvider.GetRequiredService<FFMPGEHandle>();
await ffmpegService.MergeAndSliceAsync(task);
});
SubscribeList.Add(RedisUploadChannelEnum., async (task) =>
{
using var scope = _serviceProvider.CreateScope();
var uploadService = scope.ServiceProvider.GetRequiredService<UploadHandle>();
await uploadService.RunAsync(task);
});
SubscribeList.Add(RedisUploadChannelEnum., _manager.RedisManager.TaskEnd);
}
}
public class UploadWorkflowManager : WorkflowBase<RedisUploadChannelEnum>
{
public UploadWorkflowManager(RedisClient redis, RedisManager redisManager) : base(redis, redisManager)
{
}
protected override string ChannelKey => RedisExpandKey.UploadChannelKey;
protected override int Concurrency => AppCommon.Config.Workflow.Upload.Concurrency;
}
}