1
0

Compare commits

..

No commits in common. "9e7e7df3704b64d4261e3c05866bc20400361f7c" and "a25e767b296e12b86b4272bc33880695450581c3" have entirely different histories.

10 changed files with 15 additions and 149 deletions

View File

@ -1,26 +1,13 @@
@using ServerManagement.StateStore
@implements IDisposable
@inject EindhovenOnlineServersStore EindhovenOnlineServersStore
<div class="col">
<div class="card @((city == selectedCity) ? "border-primary" : "")">
<img src=@($"/images/{@city}.png") class="card-img-top" alt="@city">
<div class="card-body @((city == selectedCity) ? "active" : "")">
<button class="btn btn-primary" @onclick="@(() => { SelectCity(city); })">@city</button>
</div>
<div>
@if (city.Equals("Eindhoven", StringComparison.OrdinalIgnoreCase))
{
<text>Online: @serversOnlineEindhoven</text>
}
</div>
</div>
</div>
@code {
private int serversOnlineEindhoven;
[Parameter]
public string? city { get; set; } = "";
@ -34,26 +21,4 @@
{
SelectCityCallBack.InvokeAsync(cityName);
}
protected override void OnAfterRender(bool firstRender)
{
if (firstRender)
{
serversOnlineEindhoven = EindhovenOnlineServersStore.GetNumberServersOnline();
EindhovenOnlineServersStore.AddStateChangeListener(OnServersStatusChange);
StateHasChanged();
}
}
private void OnServersStatusChange()
{
serversOnlineEindhoven = EindhovenOnlineServersStore.GetNumberServersOnline();
StateHasChanged();
}
// Remove the listeners, otherwise it can cause memory leaks.
public void Dispose()
{
EindhovenOnlineServersStore.RemoveStateChangeListener(OnServersStatusChange);
}
}

View File

@ -1,7 +1,6 @@
@namespace ServerManagement.Components.Controls
@inject NavigationManager NavigationManager
@inject EindhovenOnlineServersStore EindhovenOnlineServersStore
@if (Server != null)
{
@ -33,14 +32,14 @@
@if (Server.IsOnline)
{
<button type="button" class="btn btn-outline-danger"
@onclick="@(() => { SetServerStatus(false); })">
@onclick="@(() => { Server.IsOnline = false; })">
Turn off
</button>
}
else
{
<button type="button" class="btn btn-outline-success"
@onclick="@(() => { SetServerStatus(true); })">
@onclick="@(() => { Server.IsOnline = true; })">
Turn on
</button>
}
@ -93,27 +92,4 @@
return "white";
}
}
private void SetServerStatus(bool status)
{
if (this.Server != null)
{
if (this.Server.IsOnline != status)
{
if (this.Server.City.Equals("Eindhoven", StringComparison.OrdinalIgnoreCase))
{
var numberOnline = EindhovenOnlineServersStore.GetNumberServersOnline();
if (status)
{
EindhovenOnlineServersStore.SetNumberServersOnline(numberOnline + 1);
}
else if (numberOnline > 1)
{
EindhovenOnlineServersStore.SetNumberServersOnline(numberOnline - 1);
}
}
this.Server.IsOnline = status;
}
}
}
}

View File

@ -1,10 +1,7 @@
@page "/servers"
@page "/servers/back_from/{cityName}"
@using ServerManagement.Components.Controls
@inject NavigationManager NavigationManager
@inject EindhovenOnlineServersStore EindhovenOnlineServersStore
<h3>Servers</h3>
<br/>
@ -63,12 +60,6 @@
selectedCity = CityName;
StateHasChanged();
}
var serversEindhoven = ServersRepository.GetServersByCity("Eindhoven");
if (serversEindhoven != null)
{
EindhovenOnlineServersStore.SetNumberServersOnline(serversEindhoven.Count(s => s.IsOnline));
}
}
}
}

View File

@ -3,7 +3,7 @@
@using ServerManagement.StateStore
@inject NavigationManager NavigationManager
@inject ContainerStorage containerStorage
@inject SessionStorage sessionStorage
<h3>City Name</h3>
<br/>
@ -38,16 +38,16 @@
base.OnInitialized();
}
protected override void OnAfterRender(bool firstRender)
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
this.server = containerStorage.GetServer();
this.server = await sessionStorage.GetServerAsync();
StateHasChanged();
}
}
private void GoNext()
private async Task GoNext()
{
if (server != null)
{
@ -57,7 +57,7 @@
}
else
{
containerStorage.SetServer(server);
await this.sessionStorage.SetServerAsync(server);
NavigationManager.NavigateTo($"/serverstatus");
}
}

View File

@ -3,7 +3,7 @@
@using ServerManagement.StateStore
@inject NavigationManager NavigationManager
@inject ContainerStorage containerStorage
@inject SessionStorage sessionStorage
<h3>Server Name</h3>
<br/>
@ -44,7 +44,7 @@
}
}
private void GoNext()
private async Task GoNext()
{
if (string.IsNullOrWhiteSpace(server?.Name))
{
@ -52,7 +52,7 @@
}
else
{
containerStorage.SetServer(server);
await sessionStorage.SetServerAsync(server);
NavigationManager.NavigateTo($"/cityname");
}
}

View File

@ -3,7 +3,7 @@
@using ServerManagement.StateStore
@inject NavigationManager NavigationManager
@inject ContainerStorage containerStorage
@inject SessionStorage sessionStorage
<h3>Server Status</h3>
<br/>
@ -34,20 +34,20 @@
base.OnInitialized();
}
protected override void OnAfterRender(bool firstRender)
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
this.server = containerStorage.GetServer();
this.server = await sessionStorage.GetServerAsync();
StateHasChanged();
}
}
private void Save()
private async Task Save()
{
if (server != null)
{
containerStorage.SetServer(null);
await sessionStorage.SetServerAsync(null);
ServersRepository.AddServer(server);
NavigationManager.NavigateTo($"/servers/back_from/{server?.City}");
}

View File

@ -1,12 +0,0 @@
using ServerManagement.Models;
namespace ServerManagement.StateStore
{
public class ContainerStorage
{
private Server _server = new Server();
public Server GetServer() { return _server; }
public void SetServer(Server? server) { _server = server; }
}
}

View File

@ -1,18 +0,0 @@
namespace ServerManagement.StateStore
{
public class EindhovenOnlineServersStore : Observer
{
private int _numberServersOnline;
public int GetNumberServersOnline()
{
return _numberServersOnline;
}
public void SetNumberServersOnline(int numbersOnline)
{
_numberServersOnline = numbersOnline;
base.BroadcastStateChange();
}
}
}

View File

@ -1,28 +0,0 @@
namespace ServerManagement.StateStore
{
public class Observer
{
protected Action? _listeners;
public void AddStateChangeListener(Action? listener)
{
if (listener is not null)
{
_listeners += listener;
}
}
public void RemoveStateChangeListener(Action? listener)
{
if (listener is not null)
{
_listeners -= listener;
}
}
public void BroadcastStateChange()
{
_listeners?.Invoke();
}
}
}

View File

@ -9,14 +9,6 @@ builder.Services.AddRazorComponents()
builder.Services.AddTransient<SessionStorage>();
// Scoped lifespan is the same as the SignalR lifespan.
// Everything stored in the SignalR channel will be lost if that connection is broken.
// This means that the data in there, can only be used for the current user.
// For a WebAssembly, you want to use AddSingleton, so that everything is locally downloaded in the browser.
builder.Services.AddScoped<ContainerStorage>();
builder.Services.AddScoped<EindhovenOnlineServersStore>();
var app = builder.Build();
// Configure the HTTP request pipeline.