Files
NebulaLauncher/Nebula.Runner/App.cs

117 lines
2.9 KiB
C#
Raw Normal View History

2025-01-05 17:05:23 +03:00
using Nebula.Shared;
2025-01-07 17:01:00 +03:00
using Nebula.Shared.Models;
2025-01-05 17:05:23 +03:00
using Nebula.Shared.Services;
2025-01-07 17:01:00 +03:00
using Nebula.Shared.Utils;
using Robust.LoaderApi;
2025-01-05 17:05:23 +03:00
namespace Nebula.Runner;
[ServiceRegister]
2025-03-13 14:58:47 +03:00
public sealed class App(RunnerService runnerService, ContentService contentService)
2025-01-14 22:10:16 +03:00
: IRedialApi
2025-01-05 17:05:23 +03:00
{
2025-01-14 22:10:16 +03:00
public void Redial(Uri uri, string text = "")
{
}
2025-01-07 17:01:00 +03:00
public async Task Run(string[] args1)
{
var login = Environment.GetEnvironmentVariable("AUTH_LOGIN") ?? "Alexandra";
var urlraw = Environment.GetEnvironmentVariable("GAME_URL") ?? "ss14://localhost";
var url = urlraw.ToRobustUrl();
using var cancelTokenSource = new CancellationTokenSource();
var buildInfo = await contentService.GetBuildInfo(url, cancelTokenSource.Token);
2025-01-14 22:10:16 +03:00
2025-01-07 17:01:00 +03:00
var args = new List<string>
{
// Pass username to launched client.
// We don't load username from client_config.toml when launched via launcher.
"--username", login,
// Tell game we are launcher
"--cvar", "launch.launcher=true"
};
var connectionString = url.ToString();
if (!string.IsNullOrEmpty(buildInfo.BuildInfo.ConnectAddress))
connectionString = buildInfo.BuildInfo.ConnectAddress;
// We are using the launcher. Don't show main menu etc..
// Note: --launcher also implied --connect.
// For this reason, content bundles do not set --launcher.
args.Add("--launcher");
args.Add("--connect-address");
args.Add(connectionString);
args.Add("--ss14-address");
args.Add(url.ToString());
2025-01-05 17:05:23 +03:00
2025-01-14 22:10:16 +03:00
await runnerService.Run(args.ToArray(), buildInfo, this, new ConsoleLoadingHandler(), cancelTokenSource.Token);
2025-01-08 18:00:06 +03:00
}
}
public sealed class ConsoleLoadingHandler : ILoadingHandler
{
private int _currJobs;
2025-01-14 22:10:16 +03:00
private float _percent;
2025-01-08 18:00:06 +03:00
private int _resolvedJobs;
public void SetJobsCount(int count)
{
_currJobs = count;
2025-01-14 22:10:16 +03:00
2025-01-08 18:00:06 +03:00
UpdatePercent();
Draw();
}
public int GetJobsCount()
{
return _currJobs;
}
public void SetResolvedJobsCount(int count)
{
_resolvedJobs = count;
2025-01-14 22:10:16 +03:00
2025-01-08 18:00:06 +03:00
UpdatePercent();
Draw();
}
public int GetResolvedJobsCount()
{
return _resolvedJobs;
}
private void UpdatePercent()
{
2025-01-14 22:10:16 +03:00
if (_currJobs == 0)
2025-01-08 18:00:06 +03:00
{
_percent = 0;
return;
}
2025-01-14 22:10:16 +03:00
if (_resolvedJobs > _currJobs) return;
_percent = _resolvedJobs / (float)_currJobs;
2025-01-08 18:00:06 +03:00
}
private void Draw()
{
var barCount = 10;
var fullCount = (int)(barCount * _percent);
var emptyCount = barCount - fullCount;
2025-01-14 22:10:16 +03:00
2025-01-08 18:00:06 +03:00
Console.Write("\r");
2025-01-14 22:10:16 +03:00
for (var i = 0; i < fullCount; i++) Console.Write("#");
for (var i = 0; i < emptyCount; i++) Console.Write(" ");
2025-01-08 18:00:06 +03:00
Console.Write($"\t {_resolvedJobs}/{_currJobs}");
2025-01-05 17:05:23 +03:00
}
}