Gibt es eine Möglichkeit, einen Kunden von einem Client auszuschließen. Methode -Anruf in SignalR?

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

  •  26-10-2019
  •  | 
  •  

Frage

Ich bewerten SignalR (das zufällig mit KnockoutJs verwendet wird), um festzustellen, ob wir es verwenden können, um Kunden über Parallelitätsprobleme zu informieren. Grundsätzlich werden Benutzer "A" einen Datensatz und Benutzer "B, C, D, E, F, G" benachrichtigt. Ich habe im Grunde ein Beispiel, das alle Kunden benachrichtigt. Ich denke, ich bin fast da.

Ich bin darauf gestoßen Verknüpfung Und es führte mich auf den aktuellen Weg, auf dem ich bin. Ich habe mir auch die Dokumentation angesehen Github.

Grundsätzlich möchte ich den einen einzelnen Client von der ausschließen Clients.method() Anruf. Ich sehe keinen Weg, die Kunden zu durchlaufen und die ClientID zu überprüfen. Das einzige andere, das ich sehen kann, um dies zu erreichen, ist, vielleicht die Verwendung der Gruppen zu sehen, um sie im Auge zu behalten, aber das schien ein wenig umständlich zu sein, aber ich hatte auch Probleme damit.

 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);
    }
}
War es hilfreich?

Lösung

JavaScript -Code:

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

Klasse :

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

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

Andere Tipps

Wenn Sie den Anrufer vom Anruf an die Client -Seitenmethode ausschließen möchten, können Sie verwenden:

Clients.Others.clientSideMethod();

Es gibt auch Clients.Allexcept (...), die es ermöglichen, bestimmte Personen auszuschließen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top