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); } } }