Very shitty commit

This commit is contained in:
2025-11-21 23:50:48 +03:00
parent ab4a682b8a
commit ca6dd7be8f
3 changed files with 128 additions and 7 deletions

View File

@ -23,5 +23,9 @@
<PrivateAssets Condition="'$(Configuration)' != 'Debug'">All</PrivateAssets> <PrivateAssets Condition="'$(Configuration)' != 'Debug'">All</PrivateAssets>
</PackageReference> </PackageReference>
<PackageReference Include="ReactiveUI.Avalonia" Version="11.3.8"/> <PackageReference Include="ReactiveUI.Avalonia" Version="11.3.8"/>
<PackageReference Include="ReactiveUI.SourceGenerators" Version="2.5.1">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -1,6 +1,120 @@
namespace MicrosocksGUI.ViewModels; using System;
using System.Diagnostics;
using System.IO;
using System.Threading;
using System.Threading.Tasks;
using ReactiveUI;
using ReactiveUI.SourceGenerators;
public class MainWindowViewModel : ViewModelBase namespace MicrosocksGUI.ViewModels;
public partial class MainWindowViewModel : ViewModelBase
{ {
public string Greeting { get; } = "Welcome to Avalonia!"; [Reactive] private bool _isWorking;
[Reactive] private bool _isAutoloading;
[Reactive] private string? _ip;
[Reactive] private string? _port;
private Timer _timer;
private ProcessStartInfo _getStatusProcessInfo = new()
{
FileName = ".\\nssm.exe",
Arguments = "status Microsocks",
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true,
WorkingDirectory = Path.GetDirectoryName(".")
};
private ProcessStartInfo _getStartTypeProcessInfo = new()
{
FileName = ".\\nssm.exe",
Arguments = "get Microsocks Start",
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true,
WorkingDirectory = Path.GetDirectoryName(".")
};
public MainWindowViewModel()
{
// TODO Костыль, таймер запускается через секунду, а должен после инициализации ReactiveUI
_timer = new Timer(GetWorkingStatusFromService, null, TimeSpan.FromSeconds(1), TimeSpan.FromMilliseconds(100));
}
[ReactiveCommand]
private async Task SetWorkingStatusToService()
{
var args = _isWorking ? "start Microsocks" : "stop Microsocks";
ProcessStartInfo processInfo = new()
{
FileName = ".\\nssm.exe",
Arguments = args,
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true,
WorkingDirectory = Path.GetDirectoryName(".")
};
using var process = new Process();
process.StartInfo = processInfo;
process.Start();
}
private async void GetWorkingStatusFromService(object? state)
{
using (Process process = new Process())
{
process.StartInfo = _getStatusProcessInfo;
process.Start();
var output = await process.StandardOutput.ReadToEndAsync();
var error = await process.StandardError.ReadToEndAsync();
await process.WaitForExitAsync();
if (!string.IsNullOrEmpty(error))
{
//Console.WriteLine(error);
}
//Console.WriteLine(output.Replace("\0", "").Trim());
if (output.Replace("\0", "").Trim() == "SERVICE_RUNNING")
{
//Console.WriteLine("yes");
//IsWorking = true;
}
IsWorking = output.Replace("\0", "").Trim() == "SERVICE_RUNNING";
}
using (Process process = new Process())
{
process.StartInfo = _getStartTypeProcessInfo;
process.Start();
var output = await process.StandardOutput.ReadToEndAsync();
var error = await process.StandardError.ReadToEndAsync();
await process.WaitForExitAsync();
if (!string.IsNullOrEmpty(error))
{
Console.WriteLine(error);
}
IsAutoloading = output.Replace("\0", "").Trim() == "SERVICE_AUTO_START";
}
}
} }

View File

@ -27,14 +27,17 @@
<ToggleButton <ToggleButton
Grid.Column="0" Grid.Column="0"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
HorizontalContentAlignment="Center"> HorizontalContentAlignment="Center"
IsChecked="{Binding IsWorking}"
Command="{Binding SetWorkingStatusToServiceCommand}">
Работа Работа
</ToggleButton> </ToggleButton>
<ToggleButton <ToggleButton
Grid.Column="1" Grid.Column="1"
HorizontalAlignment="Stretch" HorizontalAlignment="Stretch"
HorizontalContentAlignment="Center"> HorizontalContentAlignment="Center"
IsChecked="{Binding IsAutoloading}">
Автозапуск Автозапуск
</ToggleButton> </ToggleButton>
</Grid> </Grid>
@ -43,12 +46,12 @@
<StackPanel> <StackPanel>
<TextBlock Text="IP Aдрес:" FontSize="12"/> <TextBlock Text="IP Aдрес:" FontSize="12"/>
<TextBox></TextBox> <TextBox Text="{Binding Ip}"></TextBox>
</StackPanel> </StackPanel>
<StackPanel> <StackPanel>
<TextBlock Text="Порт:" FontSize="12"/> <TextBlock Text="Порт:" FontSize="12"/>
<TextBox></TextBox> <TextBox Text="{Binding Port}"></TextBox>
</StackPanel> </StackPanel>
<Grid ColumnDefinitions="*, *" ColumnSpacing="5"> <Grid ColumnDefinitions="*, *" ColumnSpacing="5">