mlaumcherb/Млаумчерб.Клиент/Игра.cs
2024-09-14 14:36:23 +05:00

71 lines
2.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System.Threading;
using System.Threading.Tasks;
using CliWrap;
using DTLib.Extensions;
using Млаумчерб.Клиент.классы;
namespace Млаумчерб.Клиент;
public interface IGame
{
string Name { get; }
IOPath InstallationDirectory { get; }
Progress<NetworkTransferResult> BeginUpdate();
void EndUpdate();
Task Launch();
void Close();
}
public class MinecraftVersion : IGame
{
public string Name { get; }
public IOPath InstallationDirectory { get; }
private IOPath JavawFilePath;
private JavaArguments javaArgs;
private GameArguments gameArgs;
private CancellationTokenSource? cts;
private CommandTask<CommandResult> commandTask;
public MinecraftVersion(string name)
{
Name = name;
InstallationDirectory = Path.Concat("minecraft", Path.ReplaceRestrictedChars(name));
}
public Progress<NetworkTransferResult> BeginUpdate()
{
throw new NotImplementedException();
}
public void EndUpdate()
{
throw new NotImplementedException();
}
public async Task Launch()
{
var javaArgsList = javaArgs.FillPlaceholders([]);
var gameArgsList = gameArgs.FillPlaceholders([]);
var command = Cli.Wrap(JavawFilePath.ToString())
.WithWorkingDirectory(InstallationDirectory.ToString())
.WithArguments(javaArgsList)
.WithArguments(gameArgsList);
Приложение.Логгер.LogInfo(nameof(MinecraftVersion),
$"launching the game" +
"\njava: " + command.TargetFilePath +
"\nworking_dir: " + command.WorkingDirPath +
"\njava_arguments: \n\t" + javaArgsList.MergeToString("\n\t") +
"\ngame_arguments: \n\t" + gameArgsList.MergeToString("\n\t"));
cts = new();
commandTask = command.ExecuteAsync(cts.Token);
var result = await commandTask;
Приложение.Логгер.LogInfo(nameof(MinecraftVersion), $"game exited with code {result.ExitCode}");
}
public void Close()
{
cts?.Cancel();
}
}