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