Avanzando con la serie asociada a SignalR hay un punto que nos puede ser muy útil a la hora de diseñar la interacción de nuestra aplicación: los eventos de conexión.
Explicándolo de forma muy simplificada, hay tres cosas que pueden suceder en el ciclo de vida de la conexión entre el servidor y cliente:
- Inicio de la conexión
- Finalización de la conexión
- Reconexión
Los dos primeros sucederán en todos los casos, ya que siempre se creará y finalizará una conexión. En cambio la reconexión solamente se dará en aquellos casos donde haya una interrupción momentánea en la conexión entre las partes.
Lo que nos ofrece SignalR es el poder agregar lógica ante el suceso de estos eventos, pudiendo personalizar alguna situación o agregar comportamiento adicional, tanto del lado del servidor como del cliente.
Comenzando por el lado del servidor, la clase Hub – de la cual heredan nuestras propias implementaciones – tiene los métodos necesarios para la gestión de la conexión y desconexión de cada uno de los clientes del mismo. Esto lo hace a través de métodos virtuales, lo que hace que en nuestra implementación podamos realizar un override de los mismos, agregando la lógica de negocio propia además de invocar a la implementación base.
La siguiente porción de código es la definición de la clase Hub provista en las librerías de SignalR, donde podemos observar los tres métodos virtuales que nos servirán para este propósito:
|
using System; |
|
using System.Runtime.CompilerServices; |
|
using System.Threading.Tasks; |
|
using Microsoft.AspNet.SignalR.Hubs; |
|
|
|
namespace Microsoft.AspNet.SignalR |
|
{ |
|
public abstract class Hub : IHub, IUntrackedDisposable, IDisposable |
|
{ |
|
protected Hub(); |
|
|
|
public IHubCallerConnectionContext<dynamic> Clients { get; set; } |
|
public HubCallerContext Context { get; set; } |
|
public IGroupManager Groups { get; set; } |
|
|
|
public void Dispose(); |
|
public virtual Task OnConnected(); |
|
public virtual Task OnDisconnected(bool stopCalled); |
|
public virtual Task OnReconnected(); |
|
protected virtual void Dispose(bool disposing); |
|
} |
|
} |
Desde el lado del cliente los métodos estarán disponibles en el código JavaScript generado por SignalR. Veremos dichos métodos en detalle en cada evento en cuestión, junto con la explicación de cada uno:
Seguir leyendo “Eventos de conexión en SignalR” →