Saltar al contenido

Enviar mensaje a un usuario específico en Signalr

Después de buscar en varios repositorios y páginas de internet al concluir hemos descubierto la solución que te mostramos aquí.

Mantenerse connectionId con userName creando una clase como sabemos que Signalr sólo tiene la información de connectionId de cada par conectado.

Crear una clase UserConnection

Class UserConnection
  public string UserName set;get;
  public string ConnectionID set;get;

declarar una lista

List uList=new List();

pasar el nombre de usuario como cadena de consulta durante la conexión desde el lado del cliente

$.connection.hub.qs =  'username' : 'anik' ;

Empuje al usuario con conexión a esta lista en el método conectado

public override Task OnConnected()

    var us=new UserConnection();
    us.UserName = Context.QueryString['username'];
    us.ConnectionID =Context.ConnectionId;
    uList.Add(us);
    return base.OnConnected();

Desde el envío del mensaje, busque el nombre de usuario de la lista, luego recupere el ID de conexión del usuario y luego envíe

var user = uList.Where(o=>o.UserName ==userName);
if(user.Any())
   Clients.Client(user.First().ConnectionID ).sendMessage(sendFromId, userId, sendFromName, userName, message);

DEMO

Todas estas respuestas son innecesariamente complejas. Simplemente anulo “OnConnected ()”, tomo el Context.ConnectionId único y luego lo transmito de inmediato al javascript del cliente para que el cliente lo almacene y lo envíe con llamadas posteriores al servidor concentrador.

public class MyHub : Hub

    public override Task OnConnected()
    
        signalConnectionId(this.Context.ConnectionId);
        return base.OnConnected();
    

    private void signalConnectionId(string signalConnectionId)
    
        Clients.Client(signalConnectionId).signalConnectionId(signalConnectionId);
    

En el javascript:

$(document).ready(function () 

    // Reference the auto-generated proxy for the SignalR hub. 
    var myHub = $.connection.myHub;

    // The callback function returning the connection id from the hub
    myHub.client.signalConnectionId = function (data) 
        signalConnectionId = data;
    

    // Start the connection.
    $.connection.hub.start().done(function () 
        // load event definitions here for sending to the hub
    );

);

Recuerda que tienes permiso de valorar esta división .

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *