ASFFreeGames 项目开发指南
项目结构概览
ASFFreeGames 项目采用标准的 .NET 多项目解决方案架构,整体目录布局清晰,便于模块化开发与维护。
ASFFreeGames/
├── ASFFreeGames.sln
├── Directory.Build.props
├── Directory.Packages.props
├── LICENSE.txt
├── README.md
├── nuget.config
└── ASFFreeGames/
├── ArchiSteamFarm.cs
├── Program.cs
├── Config/
│ ├── Config.cs
│ └── ConfigParser.cs
├── Plugins/
│ └── ASFFreeGamesPlugin.cs
└── Tests/
└── ASFFreeGamesTests.cs
核心文件说明
- ASFFreeGames.sln:Visual Studio 解决方案文件,用于管理整个项目的构建与依赖。
- Directory.Build.props:全局构建属性配置,定义编译时默认行为,如目标框架、输出路径等。
- Directory.Packages.props:集中管理 NuGet 包版本,避免依赖冲突。
- LICENSE.txt:开源许可证文件,明确项目授权条款。
- README.md:项目使用说明文档,包含快速上手步骤和功能简介。
- nuget.config:NuGet 包源配置,指定包下载地址。
- ASFFreeGames/:主程序目录,包含核心逻辑与插件实现。
主入口点分析
程序执行起点为 Program.cs,负责初始化运行环境并启动插件服务。
using System;
using ArchiSteamFarm;
namespace ASFFreeGames
{
internal class Program
{
private static void Main(string[] args)
{
// 初始化底层框架
ArchiSteamFarm.Core.Init();
// 加载并注册自定义插件
ASFFreeGamesPlugin.Initialize();
// 启动主循环,持续监听事件
ArchiSteamFarm.Core.Run();
}
}
}
配置系统设计
配置管理由两个关键组件构成:配置模型与解析器。
Config.cs - 配置模型
namespace ASFFreeGames.Config
{
public class PluginSettings
{
/// <summary>
/// 是否跳过免费游戏(仅限非F2P)
/// </summary>
public bool SkipNonFreeToPlay { get; set; }
/// <summary>
/// 检查更新的时间间隔(单位:秒)
/// </summary>
public int UpdateIntervalSeconds { get; set; }
// 可扩展字段...
}
}
ConfigParser.cs - 配置读写逻辑
using System.IO;
using Newtonsoft.Json;
namespace ASFFreeGames.Config
{
public static class ConfigurationLoader
{
public static PluginSettings ReadFromFile(string filePath)
{
if (!File.Exists(filePath))
throw new IOException($"配置文件不存在: {filePath}");
var content = File.ReadAllText(filePath);
return JsonConvert.DeserializeObject<PluginSettings>(content) ?? new PluginSettings();
}
public static void WriteToFile(PluginSettings settings, string filePath)
{
var json = JsonConvert.SerializeObject(settings, Formatting.Indented);
File.WriteAllText(filePath, json);
}
}
}
该配置系统支持 JSON 格式存储,具备良好的可读性与扩展能力,适用于动态调整插件行为。