2012-06-24 64 views
5

Estoy planeando crear una aplicación de chat, y he leído que SignalR es una de las mejores tecnologías para aplicar.SignalR múltiples salas de chat

He visto ejemplos de esto, pero solo tienen una sala de chat.

Quiero tener varias salas de chat. El usuario simplemente elegirá una de esas salas de chat.

Aunque soy un principiante, pienso para crear una única sala de chat en SignalR es por esto:

<script type="text/javascript"> 
    $(function() { 
     var connection = $.connection.communicator; 
     connection.receive = function (from, msg) { 
      $("#chatWindow").append("<li>" + from + ": " + msg + "</li>"); 
     }; 
     $.connection.hub.start(); 

     $("#btnSend").click(function() { 
      connection.broadcast($("#txtName").val(), $("#txtMsg").val()); 
     }); 
    }); 
</script> 

conexión var = sala de chat sola (no estoy seguro)

Así si tengo muchas conexiones (por ejemplo, conexión1, conexión2, conexión3 ...) ¿puedo tener varias salas de chat?

Una vez más, no estoy seguro de si esto es correcto ... Por favor, ayúdame sobre cómo implementar múltiples salas de chat ...

(PD: He visto JABBR, pero su código está haciendo la nariz ¿Puede proporcionar ejemplos simples, por favor?)

Respuesta

14

Usted no tiene que abrir varias conexiones, sólo uno, sino a utilizar Group:

public class MyHub : Hub, IDisconnect 
{ 
    public Task Join() 
    { 
     return Groups.Add(Context.ConnectionId, "foo"); 
    } 

    public Task Send(string message) 
    { 
     return Clients["foo"].addMessage(message); 
    } 

    public Task Disconnect() 
    { 
     return Clients["foo"].leave(Context.ConnectionId); 
    } 
} 

Un grupo significa una habitación, por lo que cada vez que un usuario se une a una habitación, que acaba de añadir al usuario al el grupo de esa habitación, y cuando desee transmitir un mensaje, simplemente envíe el mensaje a los clientes del grupo.

Más detalles: https://github.com/SignalR/SignalR/wiki/Hubs

+0

también, pero no sé cómo trabajar con la Tarea –

-1

No necesita conexiones múltiples. Simplemente use uno y coloque los metadatos en el mensaje JSON devuelto para saber a qué sala pertenece el mensaje. El código de JavaScript luego necesita dirigir el mensaje a la habitación correcta.

+0

No sé cómo configurar varias habitaciones. ¿Qué parte del código tendré que modificar? –

+0

Para ver algunos ejemplos de trabajo o demos de salas de chat gratuitas en línea, esto te ayudará http://talkwithstranger.com/free-chat-rooms – Faizan

1

bien ... Esta es la forma más sencilla de hacer varias habitaciones:

$(function() { 
    var chat = jQuery.connection.chat; 

    chat.addMessage = function (message, room) { 

     if ($('#currentRoom').val() == room) { 
      $('#messagesList').append('<li>' + message + '</li>'); 
     } 
    }; 

    chat.send($('#textboxMessage').val(), $('#currentRoom').val()); 
    $('#textboxMessage').val(""); 

    $.connection.hub.start(); 
}); 


public class Chat : Hub 
{ 
    public void Send(string msg, string room) 
    { 
     Clients.addMessage(msg, room); 
    } 
} 

tengo una lista desplegable de las habitaciones disponibles, y la habitación seleccionada será el valor de un elemento, digamos que un cuadro de texto:

<input type="text" readonly="readonly" id="currentRoom" /> 

Ahora, cada vez que se llama .send, no vamos a pasar sólo el mensaje, pero al entonces la habitación actual ...

El .addMessage devolverá dos valores a cada cliente, uno es el mensaje, el otro es una habitación ... Ahora compararemos la 'habitación' devuelta con la habitación actual del cliente. Una vez que coincidan, el mensaje se mostrará en esa habitación actual:

if ($('#currentRoom').val() == room) { 
    $('#messagesList').append('<li>' + message + '</li>'); 
} 
+0

Este enfoque funciona, pero envía el mensaje a todos los clientes conectados. Al usar Grupos, puede llegar solo a los clientes conectados a una habitación específica. –