From 3cc4dace5ddd26a524b22bccfd9b460b3af9da8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20G=C3=B3reczny?= Date: Thu, 7 Jan 2021 10:51:08 +0100 Subject: [PATCH] SES-133 Create method to send message and changed Dictionary model --- .../Controllers/CharacterController.cs | 4 +-- .../SessionCompanion/Hubs/SessionHub.cs | 31 +++++++++++++++++-- .../SessionCompanion/Hubs/SessionHubData.cs | 4 +-- .../SessionCompanion/SessionCompanion.xml | 26 ++++++++++------ 4 files changed, 48 insertions(+), 17 deletions(-) diff --git a/SessionCompanion/SessionCompanion/Controllers/CharacterController.cs b/SessionCompanion/SessionCompanion/Controllers/CharacterController.cs index e691525..f05ef4a 100644 --- a/SessionCompanion/SessionCompanion/Controllers/CharacterController.cs +++ b/SessionCompanion/SessionCompanion/Controllers/CharacterController.cs @@ -66,14 +66,14 @@ namespace SessionCompanion.Controllers }; } /// - /// Metoda zwraca listę postaci przypisanych do danego użytkownika + /// Metoda zwraca listę zalogowanych postaci /// /// Lista zalogowanych postaci lub wiadomość błędu [HttpGet("loggedCharacters")] public async Task, ErrorResponse>> GetLoggedUsersCharacters() { var connectedCharacters = _sessionHubData.ConnectedCharacters_Prop; - var characters = await _service.GetBasicCharactersData(connectedCharacters.Values.ToList()); + var characters = await _service.GetBasicCharactersData(connectedCharacters.Keys.ToList()); return characters.ToList(); } diff --git a/SessionCompanion/SessionCompanion/Hubs/SessionHub.cs b/SessionCompanion/SessionCompanion/Hubs/SessionHub.cs index 4e59a32..39c02ee 100644 --- a/SessionCompanion/SessionCompanion/Hubs/SessionHub.cs +++ b/SessionCompanion/SessionCompanion/Hubs/SessionHub.cs @@ -1,5 +1,6 @@ using Microsoft.AspNetCore.SignalR; using System; +using System.Linq; using System.Threading.Tasks; namespace SessionCompanion.Hubs @@ -25,10 +26,11 @@ namespace SessionCompanion.Hubs public override Task OnDisconnectedAsync(Exception exception) { // if true then it is character, if false it is GM - if (this.sessionHubData.ConnectedCharacters_Prop.ContainsKey(Context.ConnectionId)) + if (this.sessionHubData.ConnectedCharacters_Prop.ContainsValue(Context.ConnectionId)) { Groups.RemoveFromGroupAsync(Context.ConnectionId, "Players"); - this.sessionHubData.ConnectedCharacters_Prop.Remove(Context.ConnectionId); + int charactedId = this.sessionHubData.ConnectedCharacters_Prop.Where(e => e.Value.Equals(Context.ConnectionId)).First().Key; + this.sessionHubData.ConnectedCharacters_Prop.Remove(charactedId); } else { @@ -61,6 +63,29 @@ namespace SessionCompanion.Hubs return false; } } + + /// + /// Metoda wysyła wiadomość do konkretnego gracza [MessageFromGameMaster] + /// + /// Id postaci któa ma otrzymać wiadomość + /// Wiadomość do wysłania + public void SendMessageToPlayer(int characterId, string message) + { + string playerConnectionId = ""; + if (this.sessionHubData.ConnectedCharacters_Prop.TryGetValue(characterId, out playerConnectionId)) + { + Clients.Client(playerConnectionId).SendAsync("MessageFromGameMaster", message); + } + } + + /// + /// Metoda wysyła wiadomość do wszystkich graczy [MessageFromGameMaster] + /// + /// Wiadomość do wysłania + public void SendMessageToAllPlayers(string message) + { + Clients.Group("Players").SendAsync("MessageFromGameMaster", message); + } #endregion #region Player @@ -72,7 +97,7 @@ namespace SessionCompanion.Hubs /// Wysyła wiadomość "Welcome" do wszystkich zalogowanych użytkoników public Task PlayerCharacterLogin(int characterId) { - this.sessionHubData.ConnectedCharacters_Prop.Add(Context.ConnectionId, characterId); + this.sessionHubData.ConnectedCharacters_Prop.Add(characterId, Context.ConnectionId); Groups.AddToGroupAsync(Context.ConnectionId, "Players"); return Clients.All.SendAsync("Welcome", "Welcome new Player"); diff --git a/SessionCompanion/SessionCompanion/Hubs/SessionHubData.cs b/SessionCompanion/SessionCompanion/Hubs/SessionHubData.cs index c92bfaa..7efc6c4 100644 --- a/SessionCompanion/SessionCompanion/Hubs/SessionHubData.cs +++ b/SessionCompanion/SessionCompanion/Hubs/SessionHubData.cs @@ -10,7 +10,7 @@ namespace SessionCompanion.Hubs /// /// Lista zalogowanych graczy i identyfikator wybranej postaci /// - public static Dictionary ConnectedCharacters = new Dictionary(); + public static Dictionary ConnectedCharacters = new Dictionary(); /// /// Status, czy GM został już zalogowany @@ -36,7 +36,7 @@ namespace SessionCompanion.Hubs /// /// Zwraca lub ustawia listę zalogowanych postaci /// - public Dictionary ConnectedCharacters_Prop + public Dictionary ConnectedCharacters_Prop { get { diff --git a/SessionCompanion/SessionCompanion/SessionCompanion.xml b/SessionCompanion/SessionCompanion/SessionCompanion.xml index b152a01..b96a03b 100644 --- a/SessionCompanion/SessionCompanion/SessionCompanion.xml +++ b/SessionCompanion/SessionCompanion/SessionCompanion.xml @@ -20,23 +20,16 @@ - Metoda zwraca listę postaci przypisanych do danego użytkownika + Metoda zwraca listę zalogowanych postaci Lista zalogowanych postaci lub wiadomość błędu Metoda zwraca wszystkie statystyki dla danej postaci - Zwracane statystyki dla: - Charisma - Constitution - Dexterity - Intelligence - Strength - Wisdom - - + Id postaci + Listę wszystkich statystyk @@ -79,6 +72,19 @@ Zwraca true - jeśli udało się zalogować, false - jesli ktoś zalogował się już jako GM + + + Metoda wysyła wiadomość do konkretnego gracza [MessageFromGameMaster] + + Id postaci któa ma otrzymać wiadomość + Wiadomość do wysłania + + + + Metoda wysyła wiadomość do wszystkich graczy [MessageFromGameMaster] + + Wiadomość do wysłania + Logowanie do Huba dla Gracza