网站首页 网站源码
using Dpz.Core.Service.ObjectStorage.Services;
using Dpz.Core.Service.RepositoryService;
using Hangfire;
using JetBrains.Annotations;
using MongoDB.Bson;
namespace Dpz.Core.Web.Jobs.Hangfire;
[UsedImplicitly]
public class SteamActivator(
ISteamGameService steamGameService,
IObjectStorageOperation objectStorageService
) : JobActivator
{
[ProlongExpirationTime]
public async Task UpdateLibraryAsync()
{
steamGameService.OnLogoDownloadComplete += SteamGameServiceOnOnLogoDownloadComplete;
steamGameService.OnAchievementIconDownloadComplete +=
SteamGameServiceOnOnAchievementIconDownloadComplete;
steamGameService.OnAchievementIconGrayDownloadComplete +=
SteamGameServiceOnOnAchievementIconGrayDownloadComplete;
await steamGameService.UpdateGamesAsync();
}
private async Task<string?> SteamGameServiceOnOnAchievementIconGrayDownloadComplete(
Stream? stream,
int id,
string name
)
{
if (stream == null)
return "";
#if DEBUG
var path = new[] { "Test", "images", "steam", "gray_icon", id.ToString() };
#else
var path = new[] { "images", "steam", "gray_icon", id.ToString() };
#endif
var result = await objectStorageService.UploadAsync(
stream,
path,
$"{ObjectId.GenerateNewId()}.jpg"
);
return result.AccessUrl;
}
private async Task<string?> SteamGameServiceOnOnAchievementIconDownloadComplete(
Stream? stream,
int id,
string name
)
{
if (stream == null)
return "";
#if DEBUG
var path = new[] { "Test", "images", "steam", "icon", id.ToString() };
#else
var path = new[] { "images", "steam", "icon", id.ToString() };
#endif
var result = await objectStorageService.UploadAsync(
stream,
path,
$"{ObjectId.GenerateNewId()}.jpg"
);
return result.AccessUrl;
}
private async Task<string?> SteamGameServiceOnOnLogoDownloadComplete(Stream? stream, int id)
{
if (stream == null)
return "";
//var bytes = new MemoryStream(stream).ToArray();
#if DEBUG
var path = new[] { "Test", "images", "steam", "logo", id.ToString() };
#else
var path = new[] { "images", "steam", "logo", id.ToString() };
#endif
var result = await objectStorageService.UploadAsync(stream, path, $"{id}.jpg");
return result.AccessUrl;
}
}
这段代码定义了一个名为 SteamActivator
的类,它继承自 JobActivator
,并使用了 Hangfire 进行后台作业调度。该类的主要功能是与 Steam 游戏服务进行交互,下载游戏的图标、成就图标和游戏logo,并将这些图像上传到对象存储服务中。以下是代码的详细解释:
SteamActivator
类使用了构造函数注入,接收两个依赖项:ISteamGameService
和 IObjectStorageOperation
。这两个服务分别用于处理 Steam 游戏相关的操作和对象存储操作。UpdateLibraryAsync
:
steamGameService.UpdateGamesAsync()
方法来更新游戏信息。SteamGameServiceOnOnAchievementIconGrayDownloadComplete
:
objectStorageService.UploadAsync
方法将下载的流上传到对象存储,并返回上传后的访问 URL。SteamGameServiceOnOnAchievementIconDownloadComplete
:
SteamGameServiceOnOnLogoDownloadComplete
:
#if DEBUG
指令来区分调试模式和发布模式下的存储路径。这意味着在调试模式下,图像将被上传到一个名为 "Test" 的子目录中,而在发布模式下则直接上传到 "images/steam" 目录。整体而言,SteamActivator
类的功能是通过 ISteamGameService
下载 Steam 游戏的图标和成就图标,并将这些图像上传到对象存储服务中。它通过事件处理机制来响应下载完成的事件,并使用异步编程模型来提高性能和响应性。