Est-il possible d'exclure un client d'un appel Clients.method à SignalR?

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

  •  26-10-2019
  •  | 
  •  

Question

Je suis en train d'évaluer SignalR (ce qui arrive à utiliser avec Knockoutjs) pour voir si nous pouvons l'utiliser pour informer les clients des problèmes de concurrence. Fondamentalement, l'utilisateur "a" enregistre un record et les utilisateurs "b, c, d, e, f, g" sont notifiés. J'ai essentiellement un exemple de travail qui informe tous les clients. Donc, je pense que je suis presque.

Je suis tombé sur ce lien et me conduire sur le chemin courant que je je suis sur. J'ai aussi regardé la documentation sur Github .

En fait, je veux exclure un seul client de l'appel Clients.method(). Je ne vois pas un moyen de boucle à travers les clients et vérifier la ClientId. Le seul autre que je peux voir d'y arriver est de regarder peut-être à l'aide des groupes de garder une trace de celui-ci, mais qui semblait un peu lourd, mais j'avais des problèmes avec cela aussi.

 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);
    }
}
Était-ce utile?

La solution

code 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);
    }
}

Autres conseils

Si vous voulez exclure l'appelant de l'appel à la méthode côté client, vous pouvez utiliser:

Clients.Others.clientSideMethod();

Il y a aussi Clients.AllExcept (...) qui permet d'exclure certaines personnes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top