Есть ли способ исключить клиента из клиентов. Метод вызов в SignalR?

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

  •  26-10-2019
  •  | 
  •  

Вопрос

Я оцениваю SignalR (который используется с nockoutjs), чтобы увидеть, сможем ли мы использовать его для уведомления клиентов о проблемах параллелистики. В основном пользователь «A» сохраняет запись, а пользователи «B, C, D, E, F, G» уведомляются. У меня в основном есть пример работы, который уведомляет всех клиентов. Так что я думаю, что я почти там.

Я наткнулся на это ссылка на сайт И это привело меня к текущему пути, на котором я нахожусь. Я также смотрел на документацию на GitHub.

В основном я хочу исключить одного клиента из Clients.method() вызов. Я не вижу способа пройти через клиентов и проверить ClientId. Единственное, что я могу видеть, чтобы сделать это, - это посмотреть на использование групп, чтобы отслеживать их, но это казалось немного громоздким, но у меня также были проблемы с этим.

 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);
    }
}
Это было полезно?

Решение

код 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>

Учебный класс :

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

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

Другие советы

Если вы хотите исключить вызывающего абонента из вызова к методу клиента, который вы можете использовать:

Clients.Others.clientSideMethod();

Есть также клиенты. Allexpt (...), который позволяет исключать определенных людей.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top