WorkCamera/client/WorkCameraExport/Program.cs
2026-01-05 23:58:56 +08:00

85 lines
2.8 KiB
C#

using System.Runtime.CompilerServices;
using WorkCameraExport.Forms;
using WorkCameraExport.Services;
// 允许测试项目访问 internal 成员
[assembly: InternalsVisibleTo("WorkCameraExport.Tests")]
namespace WorkCameraExport;
static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
// To customize application configuration such as set high DPI settings or default font,
// see https://aka.ms/applicationconfiguration.
ApplicationConfiguration.Initialize();
// 创建配置服务实例
var configService = new ConfigService();
// 创建日志服务实例
var logService = new LogService(configService);
// 创建 API 服务实例
using var apiService = new ApiService(logService);
// 创建登录状态管理器
using var loginStateManager = new LoginStateManager(apiService, configService, logService);
// 创建网络监控器
using var networkMonitor = new NetworkMonitor(logService);
// 主循环:处理登录失效后重新登录
while (true)
{
// 显示登录窗体
using var loginForm = new LoginForm(apiService, configService);
if (loginForm.ShowDialog() != DialogResult.OK)
{
// 用户取消登录,退出应用
return;
}
// 登录成功,保存登录状态(无论是自动登录还是手动登录)
if (loginForm.Token != null)
{
var settings = Models.AppSettings.Load();
if (loginForm.IsAutoLogin)
{
// 自动登录成功,启动 Token 检查定时器(不重新保存凭证)
loginStateManager.OnAutoLoginSuccess(settings.Username);
}
else
{
// 手动登录成功,保存凭证并启动定时器
loginStateManager.OnLoginSuccess(
settings.ServerUrl,
settings.Username,
loginForm.Token,
settings.RememberMe);
}
}
// 显示主页窗体
using var homeForm = new HomeForm(apiService, logService, loginStateManager, networkMonitor);
Application.Run(homeForm);
// 如果是登录失效导致的关闭,继续循环显示登录窗体
if (homeForm.DialogResult != DialogResult.Abort)
{
// 正常退出
break;
}
// 登录失效,清除状态并重新显示登录窗体
loginStateManager.ClearLoginState();
apiService.Logout();
}
}
}