AppOptions
This commit is contained in:
parent
a1339cfdf9
commit
4433754662
@ -14,7 +14,6 @@ namespace FastGithub.UI
|
|||||||
public partial class App : Application
|
public partial class App : Application
|
||||||
{
|
{
|
||||||
private Mutex globalMutex;
|
private Mutex globalMutex;
|
||||||
private Process fastGithub;
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 程序启动
|
/// 程序启动
|
||||||
@ -77,21 +76,22 @@ namespace FastGithub.UI
|
|||||||
/// 启动fastgithub
|
/// 启动fastgithub
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private static Process StartFastGithub()
|
private static void StartFastGithub()
|
||||||
{
|
{
|
||||||
const string fileName = "fastgithub.exe";
|
const string fileName = "fastgithub.exe";
|
||||||
if (File.Exists(fileName) == false)
|
if (File.Exists(fileName) == false)
|
||||||
{
|
{
|
||||||
return default;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var startInfo = new ProcessStartInfo
|
var startInfo = new ProcessStartInfo
|
||||||
{
|
{
|
||||||
FileName = fileName,
|
FileName = fileName,
|
||||||
|
Arguments = $"ParentProcessId {Process.GetCurrentProcess().Id}",
|
||||||
UseShellExecute = false,
|
UseShellExecute = false,
|
||||||
CreateNoWindow = true
|
CreateNoWindow = true
|
||||||
};
|
};
|
||||||
return Process.Start(startInfo);
|
Process.Start(startInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@ -3,6 +3,7 @@ using Microsoft.Extensions.Hosting;
|
|||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Diagnostics;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
using System.Net.Http;
|
using System.Net.Http;
|
||||||
@ -16,14 +17,20 @@ namespace FastGithub
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
sealed class AppHostedService : BackgroundService
|
sealed class AppHostedService : BackgroundService
|
||||||
{
|
{
|
||||||
private readonly IOptions<FastGithubOptions> options;
|
private readonly IHost host;
|
||||||
|
private readonly IOptions<AppOptions> appOptions;
|
||||||
|
private readonly IOptions<FastGithubOptions> fastGithubOptions;
|
||||||
private readonly ILogger<AppHostedService> logger;
|
private readonly ILogger<AppHostedService> logger;
|
||||||
|
|
||||||
public AppHostedService(
|
public AppHostedService(
|
||||||
IOptions<FastGithubOptions> options,
|
IHost host,
|
||||||
|
IOptions<AppOptions> appOptions,
|
||||||
|
IOptions<FastGithubOptions> fastGithubOptions,
|
||||||
ILogger<AppHostedService> logger)
|
ILogger<AppHostedService> logger)
|
||||||
{
|
{
|
||||||
this.options = options;
|
this.host = host;
|
||||||
|
this.appOptions = appOptions;
|
||||||
|
this.fastGithubOptions = fastGithubOptions;
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,19 +53,30 @@ namespace FastGithub
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
||||||
{
|
{
|
||||||
if (OperatingSystem.IsWindows())
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
await Task.Delay(TimeSpan.FromSeconds(1d), stoppingToken);
|
await Task.Delay(TimeSpan.FromSeconds(1d), stoppingToken);
|
||||||
if (await this.UseFastGithubProxyAsync() == false)
|
await this.CheckFastGithubProxyAsync(stoppingToken);
|
||||||
|
await this.WaitForParentProcessExitAsync(stoppingToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 检测fastgithub代理设置
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="cancellationToken"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private async Task CheckFastGithubProxyAsync(CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
if (OperatingSystem.IsWindows() == false)
|
||||||
{
|
{
|
||||||
var httpProxyPort = this.options.Value.HttpProxyPort;
|
if (await this.UseFastGithubProxyAsync() == false)
|
||||||
this.logger.LogWarning($"请设置系统自动代理为http://{IPAddress.Loopback}:{httpProxyPort},或手动代理http/https为{IPAddress.Loopback}:{httpProxyPort}");
|
{
|
||||||
|
var httpProxyPort = this.fastGithubOptions.Value.HttpProxyPort;
|
||||||
|
this.logger.LogWarning($"请设置系统自动代理为http://{IPAddress.Loopback}:{httpProxyPort},或手动代理http/https为{IPAddress.Loopback}:{httpProxyPort}");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 应用fastgithub代理
|
/// 应用fastgithub代理
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@ -73,7 +91,7 @@ namespace FastGithub
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var domain = this.options.Value.DomainConfigs.Keys.FirstOrDefault();
|
var domain = this.fastGithubOptions.Value.DomainConfigs.Keys.FirstOrDefault();
|
||||||
if (domain == null)
|
if (domain == null)
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
@ -86,7 +104,7 @@ namespace FastGithub
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var httpProxyPort = this.options.Value.HttpProxyPort;
|
var httpProxyPort = this.fastGithubOptions.Value.HttpProxyPort;
|
||||||
if (proxyServer.Port != httpProxyPort)
|
if (proxyServer.Port != httpProxyPort)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
@ -107,5 +125,30 @@ namespace FastGithub
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 等待父进程退出
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="cancellationToken"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private async Task WaitForParentProcessExitAsync(CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
var parentId = this.appOptions.Value.ParentProcessId;
|
||||||
|
if (parentId <= 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Process.GetProcessById(parentId).WaitForExit();
|
||||||
|
await this.host.StopAsync(cancellationToken);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
this.logger.LogError(ex, $"获取进程{parentId}异常");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
13
FastGithub/AppOptions.cs
Normal file
13
FastGithub/AppOptions.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
namespace FastGithub
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// app选项
|
||||||
|
/// </summary>
|
||||||
|
public class AppOptions
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// 父进程id
|
||||||
|
/// </summary>
|
||||||
|
public int ParentProcessId { get; set; }
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -32,6 +32,7 @@ namespace FastGithub
|
|||||||
/// <param name="services"></param>
|
/// <param name="services"></param>
|
||||||
public void ConfigureServices(IServiceCollection services)
|
public void ConfigureServices(IServiceCollection services)
|
||||||
{
|
{
|
||||||
|
services.Configure<AppOptions>(this.Configuration);
|
||||||
services.Configure<FastGithubOptions>(this.Configuration.GetSection(nameof(FastGithub)));
|
services.Configure<FastGithubOptions>(this.Configuration.GetSection(nameof(FastGithub)));
|
||||||
|
|
||||||
services.AddConfiguration();
|
services.AddConfiguration();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user