SignalR (Hub) может отправлять сообщения кроме производителя сигналов? - PullRequest
7 голосов
/ 08 декабря 2011

Я изучаю SingalR (https://github.com/SignalR/SignalR).

Я действительно хочу отправить сообщение всем соединениям , кроме человека, который делает событие.

Например,

В приложении чата есть три клиента (A, B, C).

Клиент A, введите сообщение «Hello» и кликк отправьте.

Clients.addMessage (data); отправить «Hello» для All Cleint (включая cleint A)

Я хочу отправить «Hello» только Клиентам B и C.

Как мне этого добиться?

// I think this can get all Clients, right?
var clients = Hub.GetClients<Chat>();

Ответы [ 2 ]

12 голосов
/ 08 декабря 2011

Сегодня нет возможности фильтровать сообщения на сервере, но вы можете заблокировать сообщения для вызывающего абонента со стороны клиента.Если вы посмотрите на некоторые из примеров на signalr, вы увидите, что они назначают каждому клиенту сгенерированный идентификатор для клиента в методе (обычно называемом join).Всякий раз, когда вы вызываете метод из концентратора, передайте идентификатор вызывающего клиента, затем на стороне клиента выполните проверку, чтобы убедиться, что идентификатор клиента не совпадает с идентификатором вызывающего.например,

public class Chat : Hub { 
    public void Join() {
        // Assign the caller and id
        Caller.id = Guid.NewGuid().ToString();
    }

    public void DoSomething() {
        // Pass the caller's id back to the client along with any extra data
        Clients.doIt(Caller.id, "value");
    }
}

Клиентская сторона

var chat = $.connection.chat;
chat.doIt = function(id, value) {
   if(chat.id === id) {
      // The id is the same so do nothing
      return;
   }

   // Otherwise do it!
   alert(value);
};

Надеюсь, это поможет.

5 голосов
/ 01 марта 2013

Теперь (v1.0.0) это возможно, используя свойство Clients.Others в вашем Hub.

Например: Clients.Others.addMessage(data) вызывает метод addMessage на всех клиентах, кроме звонящего.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...