123 lines
4.1 KiB
C#

using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Threading.Tasks;
using gehGassi.Dto.Messages;
namespace gehGassi.Web.Hubs
{
/// <summary>
/// Schnittstellenbeschreibung für einen Hub der verbundene Benutzer verwalten kann
/// </summary>
public interface IAppHubUsers
{
public ConcurrentDictionary<string, List<string>> ConnectedUsers { get; set; }
}
/// <summary>
/// Schnittstellenbeschreibung für einen Hub der App-Nachrichten ermöglicht
/// </summary>
public interface IAppHub
{
/// <summary>
/// Buchen der Events eines App-Users
/// </summary>
/// <param name="appUserId">ID des App-Users</param>
/// <returns>Task</returns>
Task JoinAppUser(string appUserId);
/// <summary>
/// Abbsestellen der Events eines App-Users
/// </summary>
/// <param name="appUserId">ID des App-Users</param>
/// <returns>Task</returns>
Task LeaveAppUser(string appUserId);
/// <summary>
/// Buchen der Events einer Konversation für einen Benutzer
/// </summary>
/// <param name="conversationId">Id der Konversation</param>
/// <param name="appUserId">ID des App-Users</param>
/// <returns>Task</returns>
Task JoinConversation(string conversationId, string appUserId);
/// <summary>
/// Abbsestellen der Events einer Konversation
/// </summary>
/// <param name="conversationId">Id der Konversation</param>
/// <param name="appUserId">ID des App-Users</param>
/// <returns>Task</returns>
Task LeaveConversation(string conversationId, string appUserId);
}
/// <summary>
/// Schnittstellenbeschreibung für einen Service der den Versand von SignalR-Nachrichten
/// vom Server an die App ermöglicht.
/// </summary>
public interface IAppHubSender
{
/// <summary>
/// Senden eine Nachricht an einen Benutzer
/// </summary>
/// <param name="user">Benutzer - email</param>
/// <param name="message">Nachricht</param>
/// <returns>Task</returns>
Task MessageForUser(string user, string message);
#region App-User
/// <summary>
/// Event wenn sich die Daten eines App-Users geändert haben
/// </summary>
/// <param name="appUserId">Id des App-Users</param>
/// <param name="ignoreUsers">Liste Benutzer die ignoriert werden soll</param>
/// <returns>Task</returns>
Task AppUserChangedAsync(string appUserId, List<string> ignoreUsers = null);
/// <summary>
/// Gibt zurück ob ein Benutzer verbunden ist
/// </summary>
/// <param name="userName">Benutzername</param>
/// <returns>true wenn verbunden, false sonst</returns>
Task<bool> IsUserConnectedAsync(string userName);
/// <summary>
/// Event wenn sich ein Benutzer ausloggen soll
/// </summary>
/// <param name="appUserId">Id des App-Users</param>
/// <returns></returns>
Task LogoutAsync(string appUserId);
#endregion
#region Conversations & Messages
/// <summary>
/// Event wenn eine Nachricht für einen Benutzer angekommen ist
/// </summary>
/// <param name="appUserId"></param>
/// <returns></returns>
Task MessageAddedAsync(string appUserId);
/// <summary>
/// Event wenn eine Nachricht für einen Benutzer angekommen ist
/// </summary>
/// <param name="appUserId"></param>
/// <returns></returns>
Task SystemMessageAddedAsync(string appUserId);
#endregion
#region News & Newscategories
/// <summary>
/// Event wenn sich NewsKategorien geändert haben
/// </summary>
/// <param name="ignoreUsers">Liste Benutzer die ignoriert werden soll</param>
/// <returns></returns>
Task NewsCategoriesChangedAsync(List<string> ignoreUsers = null);
#endregion
}
}