网站首页 网站源码
website
站点相关全部源代码,隐藏了一些关于服务器的信息
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;
    }
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

这段代码定义了一个名为 SteamActivator 的类,它继承自 JobActivator,并使用了 Hangfire 进行后台作业调度。该类的主要功能是与 Steam 游戏服务进行交互,下载游戏的图标、成就图标和游戏logo,并将这些图像上传到对象存储服务中。以下是代码的详细解释:

类和构造函数

  • 类定义: SteamActivator 类使用了构造函数注入,接收两个依赖项:ISteamGameServiceIObjectStorageOperation。这两个服务分别用于处理 Steam 游戏相关的操作和对象存储操作。

方法

  1. UpdateLibraryAsync:

    • 这是一个异步方法,负责更新游戏库。
    • 它注册了三个事件处理程序,分别用于处理下载完成的图标和成就图标。
    • 调用 steamGameService.UpdateGamesAsync() 方法来更新游戏信息。
  2. SteamGameServiceOnOnAchievementIconGrayDownloadComplete:

    • 处理成就图标的灰色版本下载完成事件。
    • 如果下载的流为空,返回空字符串。
    • 根据调试模式选择存储路径。
    • 调用 objectStorageService.UploadAsync 方法将下载的流上传到对象存储,并返回上传后的访问 URL。
  3. SteamGameServiceOnOnAchievementIconDownloadComplete:

    • 处理成就图标下载完成事件,逻辑与上一个方法类似。
    • 上传下载的流并返回访问 URL。
  4. SteamGameServiceOnOnLogoDownloadComplete:

    • 处理游戏logo下载完成事件。
    • 逻辑与前两个方法相似,上传下载的流并返回访问 URL。

条件编译

  • 使用 #if DEBUG 指令来区分调试模式和发布模式下的存储路径。这意味着在调试模式下,图像将被上传到一个名为 "Test" 的子目录中,而在发布模式下则直接上传到 "images/steam" 目录。

总结

整体而言,SteamActivator 类的功能是通过 ISteamGameService 下载 Steam 游戏的图标和成就图标,并将这些图像上传到对象存储服务中。它通过事件处理机制来响应下载完成的事件,并使用异步编程模型来提高性能和响应性。

loading