From 71687cafadc34d874332c550ec99173d20b7699d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20G=C3=B3reczny?= Date: Sun, 6 Dec 2020 11:01:49 +0100 Subject: [PATCH] Changed method to check if GM is allready logged --- .../SessionCompanion/Hubs/SessionHub.cs | 45 +++++++++++++++++-- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/SessionCompanion/SessionCompanion/Hubs/SessionHub.cs b/SessionCompanion/SessionCompanion/Hubs/SessionHub.cs index 9d8c7d6..d6c6573 100644 --- a/SessionCompanion/SessionCompanion/Hubs/SessionHub.cs +++ b/SessionCompanion/SessionCompanion/Hubs/SessionHub.cs @@ -8,12 +8,26 @@ 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 @@ -23,21 +37,44 @@ namespace SessionCompanion.Hubs ConnectedCharacters.Remove(Context.ConnectionId); } 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);