SES-133 Create method to send message and changed Dictionary model

This commit is contained in:
Łukasz Góreczny 2021-01-07 10:51:08 +01:00
parent 36b89d209f
commit 3cc4dace5d
4 changed files with 48 additions and 17 deletions

View File

@ -66,14 +66,14 @@ namespace SessionCompanion.Controllers
};
}
/// <summary>
/// Metoda zwraca listę postaci przypisanych do danego użytkownika
/// Metoda zwraca listę zalogowanych postaci
/// </summary>
/// <returns> Lista zalogowanych postaci lub wiadomość błędu </returns>
[HttpGet("loggedCharacters")]
public async Task<Either<List<CharacterBasicStatsViewModel>, 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();
}

View File

@ -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;
}
}
/// <summary>
/// Metoda wysyła wiadomość do konkretnego gracza [MessageFromGameMaster]
/// </summary>
/// <param name="characterId"> Id postaci któa ma otrzymać wiadomość </param>
/// <param name="message"> Wiadomość do wysłania </param>
public void SendMessageToPlayer(int characterId, string message)
{
string playerConnectionId = "";
if (this.sessionHubData.ConnectedCharacters_Prop.TryGetValue(characterId, out playerConnectionId))
{
Clients.Client(playerConnectionId).SendAsync("MessageFromGameMaster", message);
}
}
/// <summary>
/// Metoda wysyła wiadomość do wszystkich graczy [MessageFromGameMaster]
/// </summary>
/// <param name="message"> Wiadomość do wysłania </param>
public void SendMessageToAllPlayers(string message)
{
Clients.Group("Players").SendAsync("MessageFromGameMaster", message);
}
#endregion
#region Player
@ -72,7 +97,7 @@ namespace SessionCompanion.Hubs
/// <returns>Wysyła wiadomość "Welcome" do wszystkich zalogowanych użytkoników</returns>
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");

View File

@ -10,7 +10,7 @@ namespace SessionCompanion.Hubs
/// <summary>
/// Lista zalogowanych graczy i identyfikator wybranej postaci
/// </summary>
public static Dictionary<string, int> ConnectedCharacters = new Dictionary<string, int>();
public static Dictionary<int, string> ConnectedCharacters = new Dictionary<int, string>();
/// <summary>
/// Status, czy GM został już zalogowany
@ -36,7 +36,7 @@ namespace SessionCompanion.Hubs
/// <summary>
/// Zwraca lub ustawia listę zalogowanych postaci
/// </summary>
public Dictionary<string, int> ConnectedCharacters_Prop
public Dictionary<int, string> ConnectedCharacters_Prop
{
get
{

View File

@ -20,23 +20,16 @@
</member>
<member name="M:SessionCompanion.Controllers.CharacterController.GetLoggedUsersCharacters">
<summary>
Metoda zwraca listę postaci przypisanych do danego użytkownika
Metoda zwraca listę zalogowanych postaci
</summary>
<returns> Lista zalogowanych postaci lub wiadomość błędu </returns>
</member>
<member name="M:SessionCompanion.Controllers.CharacterController.GetCharacterEveryStat(System.Int32)">
<summary>
Metoda zwraca wszystkie statystyki dla danej postaci
Zwracane statystyki dla:
Charisma
Constitution
Dexterity
Intelligence
Strength
Wisdom
</summary>
<param name="characterId"></param>
<returns></returns>
<param name="characterId"> Id postaci </param>
<returns> Listę wszystkich statystyk </returns>
</member>
<member name="M:SessionCompanion.Controllers.UserController.Login(System.String,System.String)">
<summary>
@ -79,6 +72,19 @@
</summary>
<returns>Zwraca true - jeśli udało się zalogować, false - jesli ktoś zalogował się już jako GM</returns>
</member>
<member name="M:SessionCompanion.Hubs.SessionHub.SendMessageToPlayer(System.Int32,System.String)">
<summary>
Metoda wysyła wiadomość do konkretnego gracza [MessageFromGameMaster]
</summary>
<param name="characterId"> Id postaci któa ma otrzymać wiadomość </param>
<param name="message"> Wiadomość do wysłania </param>
</member>
<member name="M:SessionCompanion.Hubs.SessionHub.SendMessageToAllPlayers(System.String)">
<summary>
Metoda wysyła wiadomość do wszystkich graczy [MessageFromGameMaster]
</summary>
<param name="message"> Wiadomość do wysłania </param>
</member>
<member name="M:SessionCompanion.Hubs.SessionHub.PlayerCharacterLogin(System.Int32)">
<summary>
Logowanie do Huba dla Gracza