From b88006f02d68a56a89a3a49d62569261006485f0 Mon Sep 17 00:00:00 2001 From: kislovdm Date: Mon, 27 Apr 2026 01:11:03 +0300 Subject: [PATCH] maxconn --- .semver.txt | 2 +- src/MonsterMonitor/Models/AppSettings.cs | 3 +++ src/MonsterMonitor/MonsterMonitor.csproj | 8 +++--- .../Services/GitHubUpdateService.cs | 25 ++++++++++++++++--- src/MonsterMonitor/UI/MainForm.cs | 2 +- src/MonsterMonitor/UI/SettingsForm.cs | 18 +++++++------ 6 files changed, 42 insertions(+), 16 deletions(-) diff --git a/.semver.txt b/.semver.txt index 5b09c67..a970716 100644 --- a/.semver.txt +++ b/.semver.txt @@ -1 +1 @@ -1.0.14 +1.0.15 diff --git a/src/MonsterMonitor/Models/AppSettings.cs b/src/MonsterMonitor/Models/AppSettings.cs index d8a0500..1a9875e 100644 --- a/src/MonsterMonitor/Models/AppSettings.cs +++ b/src/MonsterMonitor/Models/AppSettings.cs @@ -21,6 +21,7 @@ namespace MonsterMonitor.Models public int LocalPort { get; set; } = 7829; public int MaxPingFailures { get; set; } = 3; public int ReconnectTimeoutSec { get; set; } = 45; + public string Proxy { get; set; } = string.Empty; public string SsProcessPath { get; set; } = Path.Combine("App_Data", "ss", "ss.exe"); public string SsArguments { get; set; } = string.Empty; @@ -163,6 +164,7 @@ namespace MonsterMonitor.Models result.LocalPort = GetInt(map, nameof(LocalPort), result.LocalPort); result.MaxPingFailures = GetInt(map, nameof(MaxPingFailures), result.MaxPingFailures); result.ReconnectTimeoutSec = GetInt(map, nameof(ReconnectTimeoutSec), result.ReconnectTimeoutSec); + result.Proxy = Get(map, nameof(Proxy), result.Proxy); result.SsProcessPath = Get(map, nameof(SsProcessPath), result.SsProcessPath); result.SsArguments = Get(map, nameof(SsArguments), result.SsArguments); @@ -191,6 +193,7 @@ namespace MonsterMonitor.Models $"{nameof(LocalPort)}={LocalPort}", $"{nameof(MaxPingFailures)}={MaxPingFailures}", $"{nameof(ReconnectTimeoutSec)}={ReconnectTimeoutSec}", + $"{nameof(Proxy)}={Proxy}", $"{nameof(SsProcessPath)}={SsProcessPath}", $"{nameof(SsArguments)}={SsArguments}" }; diff --git a/src/MonsterMonitor/MonsterMonitor.csproj b/src/MonsterMonitor/MonsterMonitor.csproj index f520900..f44446b 100644 --- a/src/MonsterMonitor/MonsterMonitor.csproj +++ b/src/MonsterMonitor/MonsterMonitor.csproj @@ -6,10 +6,10 @@ 7.3 MonsterMonitor MonsterMonitor - 1.0.14 - 1.0.14 - 1.0.14 - 1.0.14 + 1.0.15 + 1.0.15 + 1.0.15 + 1.0.15 diff --git a/src/MonsterMonitor/Services/GitHubUpdateService.cs b/src/MonsterMonitor/Services/GitHubUpdateService.cs index b15c2d8..c94ada3 100644 --- a/src/MonsterMonitor/Services/GitHubUpdateService.cs +++ b/src/MonsterMonitor/Services/GitHubUpdateService.cs @@ -10,6 +10,7 @@ using System.Runtime.Serialization.Json; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; +using MonsterMonitor.Models; namespace MonsterMonitor.Services { @@ -20,10 +21,12 @@ namespace MonsterMonitor.Services private const string GithubToken = ""; private readonly LogService _log; + private readonly AppSettings _settings; - public GitHubUpdateService(LogService log) + public GitHubUpdateService(LogService log, AppSettings settings) { _log = log; + _settings = settings; } public async Task CheckAndPrepareUpdateAsync() @@ -159,7 +162,7 @@ namespace MonsterMonitor.Services { var request = CreateGithubRequest(url, "application/vnd.github+json"); using (var response = (HttpWebResponse)await request.GetResponseAsync()) - using (var stream = response.GetResponseStream()) + using (var stream = response.GetResponseStream()) { if (stream == null) { @@ -266,7 +269,7 @@ namespace MonsterMonitor.Services return asset.DownloadUrl ?? string.Empty; } - private static HttpWebRequest CreateGithubRequest(string url, string accept) + private HttpWebRequest CreateGithubRequest(string url, string accept) { var request = (HttpWebRequest)WebRequest.Create(url); request.Method = "GET"; @@ -277,10 +280,26 @@ namespace MonsterMonitor.Services { request.Headers.Add("Authorization", "Bearer " + GithubToken); } + if (!string.IsNullOrWhiteSpace(_settings.Proxy)) + { + request.Proxy = GetProxy(_settings.Proxy); + } return request; } + private WebProxy GetProxy(string proxyUri) + { + var proxy = new WebProxy(new Uri(proxyUri), false); + var cc = new CredentialCache(); + cc.Add( + new Uri(proxyUri), + "Negotiate", // if we don't set it to "Kerberos" we get error 407 with ---> the function requested is not supported. + CredentialCache.DefaultNetworkCredentials); + proxy.Credentials = cc; + return proxy; + } + private static string BuildUpdaterScript(string appDir, string extractDir, string exePath) { return "@echo off" + Environment.NewLine + diff --git a/src/MonsterMonitor/UI/MainForm.cs b/src/MonsterMonitor/UI/MainForm.cs index b31e315..a88b6c3 100644 --- a/src/MonsterMonitor/UI/MainForm.cs +++ b/src/MonsterMonitor/UI/MainForm.cs @@ -43,7 +43,7 @@ namespace MonsterMonitor.UI _settings = AppSettings.Load(); _controller = new AppController(_log, _power); - _updateService = new GitHubUpdateService(_log); + _updateService = new GitHubUpdateService(_log, _settings); RestartServices(); ConfigureUpdateTimer(); _ = RunUpdateCheckAsync(true); diff --git a/src/MonsterMonitor/UI/SettingsForm.cs b/src/MonsterMonitor/UI/SettingsForm.cs index 1553334..57d8d70 100644 --- a/src/MonsterMonitor/UI/SettingsForm.cs +++ b/src/MonsterMonitor/UI/SettingsForm.cs @@ -17,6 +17,7 @@ namespace MonsterMonitor.UI private readonly NumericUpDown _numLocalPort = new NumericUpDown(); private readonly NumericUpDown _numMaxFailures = new NumericUpDown(); private readonly NumericUpDown _numReconnectTimeout = new NumericUpDown(); + private readonly TextBox _txtProxy = new TextBox(); private readonly TextBox _txtSsPath = new TextBox(); private readonly TextBox _txtSsArgs = new TextBox(); private readonly TextBox _txtSystemPassword = new TextBox(); @@ -30,7 +31,7 @@ namespace MonsterMonitor.UI _settings = settings; Text = "Настройки"; Width = 560; - Height = 520; + Height = 560; FormBorderStyle = FormBorderStyle.FixedDialog; MaximizeBox = false; MinimizeBox = false; @@ -47,7 +48,7 @@ namespace MonsterMonitor.UI Dock = DockStyle.Fill, Padding = new Padding(10), ColumnCount = 2, - RowCount = 14 + RowCount = 15 }; panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 44f)); panel.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 56f)); @@ -65,10 +66,11 @@ namespace MonsterMonitor.UI AddRow(panel, "Локальный порт:", _numLocalPort, 6); AddRow(panel, "Макс. потерь:", _numMaxFailures, 7); AddRow(panel, "Таймаут reconnect (сек):", _numReconnectTimeout, 8); - AddRow(panel, "Путь к ss:", _txtSsPath, 9); - AddRow(panel, "Аргументы ss:", _txtSsArgs, 10); - BuildSystemPasswordRow(panel, 11); - BuildThreeProxyPasswordRow(panel, 12); + AddRow(panel, "Прокси (http://host:port):", _txtProxy, 9); + AddRow(panel, "Путь к ss:", _txtSsPath, 10); + AddRow(panel, "Аргументы ss:", _txtSsArgs, 11); + BuildSystemPasswordRow(panel, 12); + BuildThreeProxyPasswordRow(panel, 13); foreach (var num in new[] { _numSshPort, _numRemotePort, _numLocalPort }) { @@ -93,7 +95,7 @@ namespace MonsterMonitor.UI buttonsPanel.Controls.Add(btnSave); buttonsPanel.Controls.Add(btnCancel); - panel.Controls.Add(buttonsPanel, 0, 13); + panel.Controls.Add(buttonsPanel, 0, 14); panel.SetColumnSpan(buttonsPanel, 2); } @@ -200,6 +202,7 @@ namespace MonsterMonitor.UI _numLocalPort.Value = _settings.LocalPort; _numMaxFailures.Value = _settings.MaxPingFailures; _numReconnectTimeout.Value = _settings.ReconnectTimeoutSec; + _txtProxy.Text = _settings.Proxy; _txtSsPath.Text = _settings.SsProcessPath; _txtSsArgs.Text = _settings.SsArguments; _txtSystemPassword.Text = _settings.GetSystemPassword(); @@ -223,6 +226,7 @@ namespace MonsterMonitor.UI _settings.LocalPort = (int)_numLocalPort.Value; _settings.MaxPingFailures = (int)_numMaxFailures.Value; _settings.ReconnectTimeoutSec = (int)_numReconnectTimeout.Value; + _settings.Proxy = _txtProxy.Text.Trim(); _settings.SsProcessPath = string.IsNullOrWhiteSpace(_txtSsPath.Text) ? System.IO.Path.Combine("App_Data", "ss", "ss.exe") : _txtSsPath.Text.Trim();