Я использую SignalR, и я хотел бы добавить новую функциональность, которая полностью отличается от предыдущей, поэтому я продумал отдельную логику в моем хабе.
Является ли это хорошим решением для создания одного основного концентратора, только с перезаписанными методами OnConnected () и OnDisconnected (), которые будут отвечать за сопоставление пользователей singalR со статической переменной и 2 «маленькими» концентраторами (каждый для одной темы).
Главный концентратор:
public class GlobalHub : Hub
{
public static List<UserConnectionsModel> UserConnectionsList = new List<UserConnectionsModel>();
public override Task OnConnected()
{
...
}
public override Task OnDisconnected(bool stopCalled)
{
...
}
}
Один на "маленьком" хабе:
public class FastMessageHub : Hub
{
private static IHubContext _hubContext = GlobalHost.ConnectionManager.GetHubContext<GlobalHub>();
public static void SendFastMessage(FastMessage fastMessage, string email)
{
UserConnectionsModel userConnections = GlobalHub.UserConnectionsList.FirstOrDefault(x => x.User.Email == email.Trim());
if (userConnections != null)
{
foreach (string connectionId in userConnections.ConnectionIds)
{
_hubContext.Clients.Client(connectionId).reciveMessage(fastMessage.Body, fastMessage.Subject, fastMessage.FastMessageId, fastMessage.CreateDate, "info");
}
}
...
...
}
Может быть, есть другое решение для обмена клиентами?