diff --git a/SessionCompanion/SessionCompanion/Hubs/SessionHub.cs b/SessionCompanion/SessionCompanion/Hubs/SessionHub.cs index f237634..d6c6573 100644 --- a/SessionCompanion/SessionCompanion/Hubs/SessionHub.cs +++ b/SessionCompanion/SessionCompanion/Hubs/SessionHub.cs @@ -1,19 +1,33 @@ -using System; +using Microsoft.AspNetCore.SignalR; +using System; using System.Collections.Generic; +using System.Linq; using System.Threading.Tasks; -using Microsoft.AspNetCore.SignalR; - namespace SessionCompanion.Hubs { public class SessionHub : Hub { + /// + /// Lista zalogowanych graczy i identyfikator wybranej postaci + /// private static Dictionary ConnectedCharacters = new Dictionary(); + /// + /// Status, czy GM został już zalogowany + /// + private static bool GameMasterConnected = new bool(); + public SessionHub() { } + /// + /// Metoda nadpisuje istniejącą metodę wywoływaną na utratę połączenia. + /// Ma ona za zadanie usunąć odłączonego gracza z listy zalogowanych. + /// Pozostałe ekrany zostają powiadomione wiadomością "GoodBye" + /// + /// Błąd/przyczyna odłączenia public override Task OnDisconnectedAsync(Exception exception) { // if true then it is character, if false it is GM @@ -25,22 +39,42 @@ namespace SessionCompanion.Hubs else { Groups.RemoveFromGroupAsync(Context.ConnectionId, "GameMaster"); + GameMasterConnected = false; } - Clients.All.SendAsync("GoodBye", "Player has left the game"); return base.OnDisconnectedAsync(exception); } #region GameMaster - public Task GameMasterLogin() - { - Groups.AddToGroupAsync(Context.ConnectionId, "GameMaster"); - return Clients.All.SendAsync("Welcome", "Welcome new Game Master"); + /// + /// Logowanie do Huba dla GM + /// Wysyła wiadomość "Welcome" do wszystkich zalogowanych użytkoników + /// + /// Zwraca true - jeśli udało się zalogować, false - jesli ktoś zalogował się już jako GM + public bool GameMasterLogin() + { + if (!GameMasterConnected) + { + Groups.AddToGroupAsync(Context.ConnectionId, "GameMaster"); + GameMasterConnected = true; + Clients.All.SendAsync("Welcome", "Welcome new Game Master"); + return true; + } + else + { + return false; + } } #endregion #region Player + + /// + /// Logowanie do Huba dla Gracza + /// + /// Identyfikator zalogowanego bohatera + /// Wysyła wiadomość "Welcome" do wszystkich zalogowanych użytkoników public Task PlayerCharacterLogin(int characterId) { ConnectedCharacters.Add(Context.ConnectionId, characterId);