diff --git a/MoonlightServers.Frontend/Models/ServerTab.cs b/MoonlightServers.Frontend/Models/ServerTab.cs new file mode 100644 index 0000000..5bd2a0b --- /dev/null +++ b/MoonlightServers.Frontend/Models/ServerTab.cs @@ -0,0 +1,7 @@ +namespace MoonlightServers.Frontend.Models; + +public class ServerTab +{ + public string Path { get; set; } + public string Name { get; set; } +} \ No newline at end of file diff --git a/MoonlightServers.Frontend/UI/Components/Servers/ServerTabs/BaseServerTab.razor b/MoonlightServers.Frontend/UI/Components/Servers/ServerTabs/BaseServerTab.razor new file mode 100644 index 0000000..b9f86c6 --- /dev/null +++ b/MoonlightServers.Frontend/UI/Components/Servers/ServerTabs/BaseServerTab.razor @@ -0,0 +1,13 @@ +@using Microsoft.AspNetCore.SignalR.Client +@using MoonlightServers.Frontend.UI.Views.User +@using MoonlightServers.Shared.Enums +@using MoonlightServers.Shared.Http.Responses.Users.Servers + +@code +{ + [Parameter] public ServerDetailResponse Server { get; set; } + [Parameter] public ServerState State { get; set; } + [Parameter] public string InitialConsoleMessage { get; set; } + [Parameter] public HubConnection HubConnection { get; set; } + [Parameter] public Manage Parent { get; set; } +} \ No newline at end of file diff --git a/MoonlightServers.Frontend/UI/Components/Servers/ServerTabs/ConsoleTab.razor b/MoonlightServers.Frontend/UI/Components/Servers/ServerTabs/ConsoleTab.razor new file mode 100644 index 0000000..eb2834f --- /dev/null +++ b/MoonlightServers.Frontend/UI/Components/Servers/ServerTabs/ConsoleTab.razor @@ -0,0 +1,30 @@ +@using Microsoft.AspNetCore.SignalR.Client + +@inherits BaseServerTab + +
+ +
+ +@code +{ + private XtermConsole? XtermConsole; + + protected override Task OnInitializedAsync() + { + // We are already connected to the hub at this point + + HubConnection.On("ConsoleOutput", async content => + { + if(XtermConsole != null) + await XtermConsole.Write(content); + }); + + return Task.CompletedTask; + } + + private async Task OnAfterConsoleInitialized() + { + await XtermConsole!.Write(InitialConsoleMessage); + } +} diff --git a/MoonlightServers.Frontend/UI/Views/User/Manage.razor b/MoonlightServers.Frontend/UI/Views/User/Manage.razor index 8d1f4da..b3a01f9 100644 --- a/MoonlightServers.Frontend/UI/Views/User/Manage.razor +++ b/MoonlightServers.Frontend/UI/Views/User/Manage.razor @@ -7,6 +7,7 @@ @using MoonCore.Helpers @using MoonlightServers.Shared.Enums @using MoonlightServers.Frontend.UI.Components +@using MoonlightServers.Frontend.UI.Components.Servers.ServerTabs @inject HttpApiClient ApiClient @@ -117,49 +118,17 @@ + +
+ + + + - - -
- + + + +
} @@ -171,11 +140,9 @@ private ServerDetailResponse Server; private bool NotFound = false; private ServerState State; - private string InitialConsoleMessage; // TODO: When moving to a single component, fail safe when failed to load + private string InitialConsoleMessage; - private XtermConsole? XtermConsole; - - private HubConnection WebSocketConnection; + private HubConnection HubConnection; private async Task Load(LazyLoader _) { @@ -209,12 +176,12 @@ ); // Build signal r - WebSocketConnection = new HubConnectionBuilder() + HubConnection = new HubConnectionBuilder() .WithUrl(websocketDetails.Target) .Build(); // Define handlers - WebSocketConnection.On("StateChanged", async stateStr => + HubConnection.On("StateChanged", async stateStr => { if (!Enum.TryParse(stateStr, out ServerState receivedState)) return; @@ -223,19 +190,18 @@ await InvokeAsync(StateHasChanged); }); - WebSocketConnection.On("ConsoleOutput", async content => + HubConnection.On("ConsoleOutput", async content => { - if (XtermConsole != null) - await XtermConsole.Write(content); - + // Update initial message + InitialConsoleMessage += content; await InvokeAsync(StateHasChanged); }); // Connect - await WebSocketConnection.StartAsync(); + await HubConnection.StartAsync(); // Authenticate - await WebSocketConnection.SendAsync("Authenticate", websocketDetails.AccessToken); + await HubConnection.SendAsync("Authenticate", websocketDetails.AccessToken); } catch (HttpApiException e) { @@ -246,11 +212,6 @@ } } - private async Task OnAfterConsoleInitialized() - { - await XtermConsole!.Write(InitialConsoleMessage); - } - private async Task Start() => await ApiClient.Post($"api/servers/{Server.Id}/start"); @@ -262,9 +223,9 @@ public async ValueTask DisposeAsync() { - if (WebSocketConnection.State == HubConnectionState.Connected) - await WebSocketConnection.StopAsync(); + if (HubConnection.State == HubConnectionState.Connected) + await HubConnection.StopAsync(); - await WebSocketConnection.DisposeAsync(); + await HubConnection.DisposeAsync(); } }