@using Shogi.Contracts.Api @using Shogi.Contracts.Socket; @using Shogi.Contracts.Types; @using System.Text.RegularExpressions; @inject IShogiApi ShogiApi @inject AccountState Account; @inject PromotePrompt PromotePrompt; @inject ShogiSocket ShogiSocket; @if (session == null) { } else if (isSpectating) { } else { } @code { [Parameter] public string? SessionName { get; set; } Session? session; private WhichPlayer perspective; private bool isSpectating; protected override void OnInitialized() { base.OnInitialized(); ShogiSocket.OnPlayerMoved += OnPlayerMoved_FetchSession; ShogiSocket.OnSessionJoined += OnSessionJoined_FetchSession; } protected override async Task OnParametersSetAsync() { await FetchSession(); } Task OnSessionJoined_FetchSession(SessionJoinedByPlayerSocketMessage args) { if (args.SessionName == SessionName) { return FetchSession(); } return Task.CompletedTask; } async Task FetchSession() { if (!string.IsNullOrWhiteSpace(SessionName)) { this.session = await ShogiApi.GetSession(SessionName); if (this.session != null) { var accountId = Account.User?.Id; this.perspective = accountId == session.Player2 ? WhichPlayer.Player2 : WhichPlayer.Player1; this.isSpectating = !(accountId == this.session.Player1 || accountId == this.session.Player2); Console.WriteLine($"IsSpectating - {isSpectating}. AccountId - {accountId}. Player1 - {this.session.Player1}. Player2 - {this.session.Player2}"); } StateHasChanged(); } } Task OnPlayerMoved_FetchSession(PlayerHasMovedMessage args) { if (args.SessionName == SessionName) { return FetchSession(); } return Task.CompletedTask; } }