dev
This commit is contained in:
parent
a0a4d5efba
commit
26f08d9dc1
|
|
@ -154,11 +154,7 @@
|
|||
{
|
||||
await base.OnInitializedAsync();
|
||||
|
||||
var authState = await AuthenticationStateProvider.GetAuthenticationStateAsync();
|
||||
var user = authState.User;
|
||||
|
||||
isAuthenticated = user.Identity?.IsAuthenticated ?? false;
|
||||
_userName = isAuthenticated ? user.Identity?.Name : "Gast";
|
||||
|
||||
|
||||
|
||||
// Beim Laden (auch nach F5) werden die gespeicherten Daten geladen
|
||||
|
|
|
|||
|
|
@ -1,23 +1,28 @@
|
|||
using Fluxor;
|
||||
using KoogleApp.Model;
|
||||
using KoogleApp.Services;
|
||||
using KoogleApp.Store.Game.ThrowPanel;
|
||||
using Microsoft.AspNetCore.Components;
|
||||
using Microsoft.AspNetCore.Components.Authorization;
|
||||
using Microsoft.AspNetCore.SignalR;
|
||||
using Microsoft.AspNetCore.SignalR.Client;
|
||||
using Microsoft.EntityFrameworkCore.Metadata.Internal;
|
||||
using System.Diagnostics;
|
||||
using KoogleApp.Store.Game.ThrowPanel;
|
||||
|
||||
namespace KoogleApp.Hub
|
||||
{
|
||||
public class HubConnectionService : IAsyncDisposable
|
||||
{
|
||||
private readonly NavigationManager _navigationManager;
|
||||
private readonly AuthenticationStateProvider _authenticationStateProvider;
|
||||
private HubConnection? _hubConnection;
|
||||
private string? _userName;
|
||||
|
||||
public HubConnectionService(NavigationManager navigationManager)
|
||||
public HubConnectionService(NavigationManager navigationManager,
|
||||
AuthenticationStateProvider authenticationStateProvider)
|
||||
{
|
||||
_navigationManager = navigationManager;
|
||||
_authenticationStateProvider = authenticationStateProvider;
|
||||
}
|
||||
|
||||
public HubConnection Connection => _hubConnection
|
||||
|
|
@ -31,6 +36,12 @@ namespace KoogleApp.Hub
|
|||
|
||||
public async Task ConnectToHub(IDispatcher dispatcher)
|
||||
{
|
||||
var authState = await _authenticationStateProvider.GetAuthenticationStateAsync();
|
||||
var user = authState.User;
|
||||
var isAuthenticated = user.Identity?.IsAuthenticated ?? false;
|
||||
_userName = isAuthenticated ? user.Identity?.Name : "Gast";
|
||||
|
||||
|
||||
_hubConnection = new HubConnectionBuilder()
|
||||
.WithUrl(_navigationManager.ToAbsoluteUri("/sharedmodelhub"))
|
||||
.WithAutomaticReconnect()
|
||||
|
|
@ -85,17 +96,19 @@ namespace KoogleApp.Hub
|
|||
public class SharedModelHub : Microsoft.AspNetCore.SignalR.Hub
|
||||
{
|
||||
private readonly IGameStatusDataService _dataService;
|
||||
private readonly AuthenticationStateProvider _authenticationStateProvider;
|
||||
//private HubConnection _hubConnection;
|
||||
|
||||
|
||||
//public async Task UpdateText(string newText)
|
||||
//{
|
||||
// await Clients.Others.SendAsync("ReceiveTextUpdate", newText);
|
||||
//}
|
||||
|
||||
public SharedModelHub(IGameStatusDataService dataService, NavigationManager navigationManager)
|
||||
public SharedModelHub(IGameStatusDataService dataService, NavigationManager navigationManager,
|
||||
AuthenticationStateProvider authenticationStateProvider)
|
||||
{
|
||||
_dataService = dataService;
|
||||
|
||||
_authenticationStateProvider = authenticationStateProvider;
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -186,6 +199,7 @@ namespace KoogleApp.Hub
|
|||
await base.OnConnectedAsync();
|
||||
}
|
||||
|
||||
|
||||
public async Task BroadcastThrowPanelState(ThrowPanelState state, IDispatcher dispatcher)
|
||||
{
|
||||
//if (_hubConnection?.State != HubConnectionState.Connected)
|
||||
|
|
|
|||
|
|
@ -20,6 +20,10 @@ namespace KoogleApp.Store.Game.ThrowPanel
|
|||
|
||||
public record StateLoadedAction(ThrowPanelState? State);
|
||||
|
||||
public record SaveThrowPanelStateAction(ThrowPanelState State);
|
||||
|
||||
public record ThrowPanelStateChangedAction(ThrowPanelState State, bool SaveToDb);
|
||||
|
||||
public record BroadcastThrowPanelStateAction(ThrowPanelState State);
|
||||
|
||||
public record ThrowAction(bool LeftSink, bool RightSink);
|
||||
|
|
|
|||
|
|
@ -2,7 +2,9 @@
|
|||
using KoogleApp.Hub;
|
||||
using KoogleApp.Model;
|
||||
using KoogleApp.Services;
|
||||
using Microsoft.AspNetCore.Components.Authorization;
|
||||
using System.Text.Json;
|
||||
using Microsoft.Win32.SafeHandles;
|
||||
|
||||
namespace KoogleApp.Store.Game.ThrowPanel
|
||||
{
|
||||
|
|
@ -13,16 +15,20 @@ namespace KoogleApp.Store.Game.ThrowPanel
|
|||
private readonly IState<ThrowPanelState> _state;
|
||||
private readonly SessionStorage _sessionStorage;
|
||||
private readonly string _dataFilePath = "ThrowPanelState.json";
|
||||
private readonly AuthenticationStateProvider _authenticationStateProvider;
|
||||
|
||||
public ThrowPanelEffects(
|
||||
ILogger<ThrowPanelEffects> logger,
|
||||
HubConnectionService sharedModelHub, IState<ThrowPanelState> state,
|
||||
HubConnectionService sharedModelHub,
|
||||
IState<ThrowPanelState> state,
|
||||
AuthenticationStateProvider authenticationStateProvider,
|
||||
SessionStorage sessionStorage)
|
||||
{
|
||||
_logger = logger;
|
||||
_sharedModelHub = sharedModelHub;
|
||||
_state = state;
|
||||
_sessionStorage = sessionStorage;
|
||||
_authenticationStateProvider = authenticationStateProvider;
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
|
|
@ -32,41 +38,45 @@ namespace KoogleApp.Store.Game.ThrowPanel
|
|||
|
||||
//[EffectMethod(typeof(StartStopAction))]
|
||||
[EffectMethod]
|
||||
public async Task HandleStartAction(StartStopAction stopAction, IDispatcher dispatcher)
|
||||
public Task HandleStartAction(StartStopAction stopAction, IDispatcher dispatcher)
|
||||
{
|
||||
dispatcher.Dispatch(new BroadcastThrowPanelStateAction(_state.Value));
|
||||
dispatcher.Dispatch(new ThrowPanelStateChangedAction(_state.Value, false));
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
[EffectMethod]
|
||||
public async Task HandleToggleAllPinsAction(ToggleAllPinsAction stopAction, IDispatcher dispatcher)
|
||||
public Task HandleToggleAllPinsAction(ToggleAllPinsAction stopAction, IDispatcher dispatcher)
|
||||
{
|
||||
dispatcher.Dispatch(new BroadcastThrowPanelStateAction(_state.Value));
|
||||
dispatcher.Dispatch(new ThrowPanelStateChangedAction(_state.Value, false));
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
[EffectMethod]
|
||||
public async Task HandleTogglePinValueAction(TogglePinValueAction stopAction, IDispatcher dispatcher)
|
||||
public Task HandleTogglePinValueAction(TogglePinValueAction stopAction, IDispatcher dispatcher)
|
||||
{
|
||||
dispatcher.Dispatch(new BroadcastThrowPanelStateAction(_state.Value));
|
||||
dispatcher.Dispatch(new ThrowPanelStateChangedAction(_state.Value, false));
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
[EffectMethod]
|
||||
public async Task HandleUpdatePinStateByNumberAction(UpdatePinStateByNumberAction stopAction, IDispatcher dispatcher)
|
||||
public Task HandleUpdatePinStateByNumberAction(UpdatePinStateByNumberAction stopAction, IDispatcher dispatcher)
|
||||
{
|
||||
dispatcher.Dispatch(new BroadcastThrowPanelStateAction(_state.Value));
|
||||
dispatcher.Dispatch(new ThrowPanelStateChangedAction(_state.Value, false));
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
[EffectMethod]
|
||||
public async Task HandleToggleBellAction(ToggleBellAction stopAction, IDispatcher dispatcher)
|
||||
public Task HandleToggleBellAction(ToggleBellAction stopAction, IDispatcher dispatcher)
|
||||
{
|
||||
dispatcher.Dispatch(new BroadcastThrowPanelStateAction(_state.Value));
|
||||
dispatcher.Dispatch(new ThrowPanelStateChangedAction(_state.Value, false));
|
||||
return Task.CompletedTask;
|
||||
}
|
||||
|
||||
[EffectMethod]
|
||||
public async Task HandleThrowAction(ThrowAction stopAction, IDispatcher dispatcher)
|
||||
public async Task HandleThrowAction(ThrowAction throwAction, IDispatcher dispatcher)
|
||||
{
|
||||
dispatcher.Dispatch(new BroadcastThrowPanelStateAction(_state.Value));
|
||||
dispatcher.Dispatch(new ThrowPanelStateChangedAction(_state.Value,true));
|
||||
}
|
||||
|
||||
|
||||
[EffectMethod]
|
||||
public async Task HandleConnectToHubAction(ConnectToHubAction action, IDispatcher dispatcher)
|
||||
|
|
@ -82,6 +92,23 @@ namespace KoogleApp.Store.Game.ThrowPanel
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
[EffectMethod]
|
||||
public async Task HandelThrowPanelStateChangedAction(ThrowPanelStateChangedAction action,
|
||||
IDispatcher dispatcher)
|
||||
{
|
||||
dispatcher.Dispatch(new SaveThrowPanelStateAction(action.State));
|
||||
dispatcher.Dispatch(new BroadcastThrowPanelStateAction(action.State));
|
||||
|
||||
if (action.SaveToDb)
|
||||
{
|
||||
var username = await GetUsername();
|
||||
Console.WriteLine(username);
|
||||
////_dataService.UpdateData(state, _userName);
|
||||
}
|
||||
}
|
||||
|
||||
[EffectMethod]
|
||||
public async Task HandelLoadStateAction(LoadStateFromSessionAction stateFromSessionAction, IDispatcher dispatcher)
|
||||
{
|
||||
|
|
@ -107,11 +134,10 @@ namespace KoogleApp.Store.Game.ThrowPanel
|
|||
{
|
||||
dispatcher.Dispatch(new StateLoadedAction(state));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[EffectMethod]
|
||||
public async Task HandelBroadcastThrowPanelStateAction(BroadcastThrowPanelStateAction action, IDispatcher dispatcher)
|
||||
public async Task HandelSaveThrowPanelStateAction(SaveThrowPanelStateAction action, IDispatcher dispatcher)
|
||||
{
|
||||
await _sessionStorage.SetThrowPanelStateAsync(action.State);
|
||||
|
||||
|
|
@ -127,8 +153,26 @@ namespace KoogleApp.Store.Game.ThrowPanel
|
|||
{
|
||||
// TODO error handling
|
||||
}
|
||||
}
|
||||
|
||||
[EffectMethod]
|
||||
public async Task HandelBroadcastThrowPanelStateAction(BroadcastThrowPanelStateAction action, IDispatcher dispatcher)
|
||||
{
|
||||
await _sharedModelHub.HandelBroadcastThrowPanelStateAction(action, dispatcher);
|
||||
}
|
||||
|
||||
|
||||
private async Task<string> GetUsername()
|
||||
{
|
||||
var authState = await _authenticationStateProvider.GetAuthenticationStateAsync();
|
||||
var user = authState.User;
|
||||
var isAuthenticated = user.Identity?.IsAuthenticated ?? false;
|
||||
return isAuthenticated ? user.Identity?.Name : "Gast";
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ using KoogleApp.Model;
|
|||
|
||||
namespace KoogleApp.Store.Game.ThrowPanel
|
||||
{
|
||||
// Reducer
|
||||
public static class ThrowPanelStateReducer
|
||||
{
|
||||
[ReducerMethod]
|
||||
|
|
@ -216,29 +215,29 @@ namespace KoogleApp.Store.Game.ThrowPanel
|
|||
}
|
||||
|
||||
|
||||
return state with
|
||||
{
|
||||
Pin1Value = _pins[8].Value,
|
||||
Pin1Disabled = _pins[8].Disabled,
|
||||
Pin2Value = _pins[7].Value,
|
||||
Pin2Disabled = _pins[7].Disabled,
|
||||
Pin3Value = _pins[6].Value,
|
||||
Pin3Disabled = _pins[6].Disabled,
|
||||
Pin4Value = _pins[5].Value,
|
||||
Pin4Disabled = _pins[5].Disabled,
|
||||
Pin5Value = _pins[4].Value,
|
||||
Pin5Disabled = _pins[4].Disabled,
|
||||
Pin6Value = _pins[3].Value,
|
||||
Pin6Disabled = _pins[3].Disabled,
|
||||
Pin7Value = _pins[2].Value,
|
||||
Pin7Disabled = _pins[2].Disabled,
|
||||
Pin8Value = _pins[1].Value,
|
||||
Pin8Disabled = _pins[1].Disabled,
|
||||
Pin9Value = _pins[0].Value,
|
||||
Pin9Disabled = _pins[0].Disabled,
|
||||
ThrowCounter = nextCounter,
|
||||
BellValue = false
|
||||
};
|
||||
return state with
|
||||
{
|
||||
Pin1Value = _pins[8].Value,
|
||||
Pin1Disabled = _pins[8].Disabled,
|
||||
Pin2Value = _pins[7].Value,
|
||||
Pin2Disabled = _pins[7].Disabled,
|
||||
Pin3Value = _pins[6].Value,
|
||||
Pin3Disabled = _pins[6].Disabled,
|
||||
Pin4Value = _pins[5].Value,
|
||||
Pin4Disabled = _pins[5].Disabled,
|
||||
Pin5Value = _pins[4].Value,
|
||||
Pin5Disabled = _pins[4].Disabled,
|
||||
Pin6Value = _pins[3].Value,
|
||||
Pin6Disabled = _pins[3].Disabled,
|
||||
Pin7Value = _pins[2].Value,
|
||||
Pin7Disabled = _pins[2].Disabled,
|
||||
Pin8Value = _pins[1].Value,
|
||||
Pin8Disabled = _pins[1].Disabled,
|
||||
Pin9Value = _pins[0].Value,
|
||||
Pin9Disabled = _pins[0].Disabled,
|
||||
ThrowCounter = nextCounter,
|
||||
BellValue = false
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,24 +1,24 @@
|
|||
{
|
||||
"IsStated": true,
|
||||
"BellValue": false,
|
||||
"Pin1Value": false,
|
||||
"Pin1Value": true,
|
||||
"Pin2Value": true,
|
||||
"Pin3Value": false,
|
||||
"Pin4Value": true,
|
||||
"Pin5Value": false,
|
||||
"Pin6Value": true,
|
||||
"Pin6Value": false,
|
||||
"Pin7Value": false,
|
||||
"Pin8Value": true,
|
||||
"Pin9Value": true,
|
||||
"Pin1Disabled": false,
|
||||
"Pin8Value": false,
|
||||
"Pin9Value": false,
|
||||
"Pin1Disabled": true,
|
||||
"Pin2Disabled": true,
|
||||
"Pin3Disabled": false,
|
||||
"Pin4Disabled": true,
|
||||
"Pin5Disabled": false,
|
||||
"Pin6Disabled": true,
|
||||
"Pin6Disabled": false,
|
||||
"Pin7Disabled": false,
|
||||
"Pin8Disabled": true,
|
||||
"Pin9Disabled": true,
|
||||
"Pin8Disabled": false,
|
||||
"Pin9Disabled": false,
|
||||
"ThrowsPerRound": 3,
|
||||
"ThrowCounter": 3,
|
||||
"ThrowMode": 1
|
||||
|
|
|
|||
Loading…
Reference in New Issue