This is a simple how to (code provided), on quickly setting up a SignalR Hub to broadcast server raised events to?clients
Prerequisite
- SignalR is already setup in your Asp.Net Mvc application
- You know how to call client methods
- You already know how to write and wire up events
Lets get to it
1. Create your Hub and name your Hub (i.e. StatusReporterHub)
public?class?StatusReporterHub?:?Hub { ???? }
2. Make sure the following usings?are added
using?System; using?System.Linq; using?Microsoft.AspNet.SignalR; using?Microsoft.AspNet.SignalR.Hubs;
3. Create a new sealed class, relate the name to your Hub (i.e. StatusReporterBroadcaster). Use the sealed modifier to prevent other classes from inheriting from it. The?class needs to use the singleton pattern?as?the class should?only be initialized?once. We use Lazy to make it thread safe.
public?sealed?class?StatusReporterBroadcaster { ????private?readonly?static?Lazy<StatusReporterBroadcaster>?instance?= ????????new?Lazy<StatusReporterBroadcaster>(()?=>?new?StatusReporterBroadcaster(GlobalHost.ConnectionManager.GetHubContext<StatusReporterHub>().Clients)); ????private?IHubConnectionContext?clients?{?get;?set;?} ????public?static?StatusReporterBroadcaster?Instance ????{ ????????get ????????{ ????????????return?instance.Value; ????????} ????} ????private?StatusReporterBroadcaster(IHubConnectionContext?_clients) ????{ ????????clients?=?_clients; ????????//Hook?up?events?here? ????????// ????????//Example: using a static event ????????//TaskRepository.TaskStatusChanged?+=?(changeType,?dto)?=> ????????//{ ????????//????Clients.All.TaskStatusChanged(changeType.ToString("F"),?dto); ????????//}; ????} }
3. ?Now in your Hub class add below code so your Hub looks like this:
public?class?StatusReporterHub?:?Hub { ????private?readonly?StatusReporterBroadcaster?broadcaster; ????public?StatusReporterHub():?this(StatusReporterBroadcaster.Instance) ????{ ????} ????public?StatusReporterHub(StatusReporterBroadcaster?_broadcaster) ????{ ????????broadcaster?=?_broadcaster; ????} }
5. And that is it, all done.