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();
}
}