C'è un modo per escludere un client da una chiamata in Clients.method SignalR?

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

  •  26-10-2019
  •  | 
  •  

Domanda

Sto valutando SignalR (che sembra essere usato con Knockoutjs) per vedere se siamo in grado di usarlo per informare i clienti di problemi di concorrenza. Fondamentalmente utente "a" salva un record e gli utenti "b, c, d, e, f, g" sono notificati. Io fondamentalmente ho un esempio di lavoro che notifica tutti i clienti. Quindi penso che io sono quasi.

mi sono imbattuto in questo link e mi portano sulla strada attuale che ho sono on. Sono stato anche guardando la documentazione sul Github .

In sostanza voglio escludere la un singolo client dalla chiamata Clients.method(). Non vedo un modo per scorrere i clienti e controllare il ClientId. L'unico altro posso vedere per raggiungere questo obiettivo è quello di guardare forse a usare i gruppi per tenere traccia di esso, ma che sembrava un po 'ingombrante, ma ho avuto problemi con quello.

 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);
    }
}
È stato utile?

Soluzione

codice 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>

Classe:

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

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

Altri suggerimenti

Se si vuole escludere il chiamante dalla chiamata al metodo lato client è possibile utilizzare:

Clients.Others.clientSideMethod();

C'è anche Clients.AllExcept (...) che permette di escludere certe persone.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top