Strongly Typed SignalR Hub
An example of a strongly typed Hub
Please add an interface file to the root of your project and call it ILearningHubClient.cs. The content of the interface should be as follows:
using System.Threading.Tasks;
namespace LearningSignalR
{
public interface ILearningHubClient
{
Task ReceiveMessage(string message);
}
}
Now, please modify your LearningHub.cs file, so it's content is as follows:
using Microsoft.AspNetCore.SignalR;
using System;
using System.Threading.Tasks;
namespace LearningSignalR
{
public class LearningHub : Hub<ILearningHubClient>
{
public async Task BroadcastMessage(string message)
{
await Clients.All.ReceiveMessage(message);
}
public async Task SendToCaller(string message)
{
await Clients.Caller.ReceiveMessage(message);
}
public async Task SendToOthers(string message)
{
await Clients.Others.ReceiveMessage(message);
}
public async Task SendToGroup(string groupName, string message)
{
await Clients.Group(groupName).ReceiveMessage(message);
}
public async Task AddUserToGroup(string groupName)
{
await Groups.AddToGroupAsync(Context.ConnectionId, groupName);
await Clients.Caller.ReceiveMessage($"Current user added to {groupName} group");
await Clients.Others.ReceiveMessage($"User {Context.ConnectionId} added to {groupName} group");
}
public async Task RemoveUserFromGroup(string groupName)
{
await Groups.RemoveFromGroupAsync(Context.ConnectionId, groupName);
await Clients.Caller.ReceiveMessage($"Current user removed from {groupName} group");
await Clients.Others.ReceiveMessage($"User {Context.ConnectionId} removed from {groupName} group");
}
public override async Task OnConnectedAsync()
{
await Groups.AddToGroupAsync(Context.ConnectionId, "HubUsers");
await base.OnConnectedAsync();
}
public override async Task OnDisconnectedAsync(Exception exception)
{
await Groups.RemoveFromGroupAsync(Context.ConnectionId, "HubUsers");
await base.OnDisconnectedAsync(exception);
}
}
}