2011-12-08 27 views
7

Estoy estudiando SingalR (https://github.com/SignalR/SignalR).SignalR (Hub) puede enviar un mensaje, excepto fabricante de señal?

Realmente quiero enviar un mensaje a todas las conexiones excepto a la persona que hace un evento.

Por ejemplo,

en charlar aplicación, hay tres cliente (A, B, C).

Cliente A escriba un mensaje, "Hola" y haga clic en clikc.

Clients.addMessage (datos); enviar "Hola" a todos cleint (incluya cleint A)

Quiero enviar "Hola", sólo el cliente B y C.

¿Cómo se puede lograr lo que?

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

@dfowler ¿Podría ayudarme un poco ^^? – ShootingStar

Respuesta

12

No hay manera de filtrar el mensaje en el servidor actual, pero se puede bloquear los mensajes a la persona que llama desde el lado del cliente. Si observa algunas de las muestras en el señalizador, verá que le asignan a cada cliente un ID generado al cliente en un método (generalmente llamado join). Cada vez que invoque un método desde el concentrador, pase la identificación del cliente llamante, luego en el lado del cliente, haga una comprobación para asegurarse de que la identificación del cliente no sea la misma que la de la persona que llama. p.ej.

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

lado del cliente

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

Espero que ayude.

+0

Creo que esto es realmente útil para mí. Gracias por su respuesta. También gracias por el gran marco. Salud. – ShootingStar

+0

¿La propiedad de identificación ha cambiado desde su respuesta? No puedo obtener la identificación en el lado del cliente, devuelve indefinido. –

5

Ahora es posible (v1.0.0) utilizando la propiedad Clients.Others en su Hub.

Por ej .: Clients.Others.addMessage(data) llama al método addMessage en todos los clientes excepto en el llamante.

Cuestiones relacionadas