¿Hay alguna forma de excluir a un cliente de un cliente. Method Llamado en SignalR?

StackOverflow https://stackoverflow.com/questions/8806301

  •  26-10-2019
  •  | 
  •  

Pregunta

Estoy evaluando SignalR (que se usa con knockoutjs) para ver si podemos usarlo para notificar a los clientes sobre problemas de concurrencia. Básicamente, el usuario "A" guarda un registro y usuarios "se notifican B, C, D, E, F, G". Básicamente tengo un ejemplo de trabajo que notifica a todos los clientes. Así que creo que casi estoy allí.

Me encontré con esto Enlace Y me llevó a la ruta actual en la que estoy. También he estado mirando la documentación en Github.

Básicamente quiero excluir a un solo cliente del Clients.method() llamar. No veo una forma de recorrer los clientes y verificar el cliente. El único otro que puedo ver para lograr esto es tal vez mirar el uso de los grupos para realizar un seguimiento de ello, pero eso parecía un poco engorroso, pero también tenía problemas con eso.

 public class TicketHub : Hub
{
    static int TotalTickets = 10;

    public void GetTicketCount()
    {
        AddToGroup("ticketClients");
        Clients.setTicketCount(TotalTickets);
    }

    public void BuyTicket()
    {
        if (TotalTickets > 0)
            TotalTickets -= 1;

        RemoveFromGroup("ticketClients");

        //  This will call the method ONLY on the calling client
        //  Caller.updateTicketCountWithNotification(TotalTickets);

        // This will call the method on ALL clients in the group
        Clients["ticketClients"].updateTicketCountNotify(TotalTickets);

        AddToGroup("ticketClients");

        Caller.updateTicketCountDontNotify(TotalTickets);
    }
}
¿Fue útil?

Solución

Código JavaScript:

<script type="text/javascript">
    $(document).ready(function () {
        var test = $.connection.test;
        $("#btnTest").click(function () {
            test.testMethod();
        });
        test.show = function (text, guid) {
            if (guid != test.guid) //notify all clients except the caller
                alert(text);
        };
        $.connection.hub.start(function () { test.start(); });
    });
</script>

Clase :

public class Test : Hub
{
    public void Start()
    {
        Caller.guid = Guid.NewGuid();
    }

    public void TestMethod()
    {
        Clients.show("test", Caller.guid);
    }
}

Otros consejos

Si desea excluir a la persona que llama desde la llamada al método del lado del cliente, puede usar:

Clients.Others.clientSideMethod();

También hay clientes. Allexcept (...) que permite excluir a ciertas personas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top