85 lines
2.8 KiB
C#
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();
|
|
}
|
|
}
|
|
}
|