2012-06-24 15 views
5

Sto progettando di creare un'applicazione di chat, e ho letto che SignalR è uno dei migliori tecnologie da applicare.SignalR camere multiple di chiacchierata

ho visto esempi di esso, ma hanno solo un unico chat room.

voglio avere più stanze di chat. L'utente sceglierà solo una di quelle chat room.

Anche se io sono un principiante, credo che per creare un unico chat room in SignalR è da questo:

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

connessione var = chat singola (non sono sicuro)

Così se ho molte connessioni (ad esempio, Connection1 Connection2, Connection3 ....) posso avere più stanze di chat?

Ancora una volta, non sono sicuro se questo è corretto ... Please help me su come implementare più stanze di chat ...

(PS: Ho visto JABBR, ma il suo codice sta facendo il mio naso sanguinare. Potete fornire semplici esempi, per favore?)

risposta

14

Non è necessario aprire più connessioni, uno solo, ma di utilizzare 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 gruppo significa una stanza, così ogni volta che un utente si unisce a una stanza, basta aggiungere l'utente a il gruppo di quella stanza e quando si desidera trasmettere un messaggio, è sufficiente inviare il messaggio ai client nel gruppo.

Maggiori dettagli: https://github.com/SignalR/SignalR/wiki/Hubs

+0

utile anche, ma non so come lavorare con Task –

-1

non hai bisogno di connessioni multiple. Basta usarne uno e inserire i metadati nel messaggio JSON restituito su quale stanza è il messaggio. Il codice JavaScript deve quindi indirizzare il messaggio nella stanza corretta.

+0

non so come impostare più stanze. quale parte del codice dovrò modificare? –

+0

per vedere alcune delle esempio di lavoro o dimostrazioni di camere Chatta, questo vi aiuterà a http://talkwithstranger.com/free-chat-rooms – Faizan

1

Va bene ... Ecco il modo più semplice per fare camere multiple:

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

Ho un elenco a discesa delle camere disponibili, e la sala selezionato sarà il valore di un elemento, diciamo una casella di testo:

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

Ora, ogni volta che viene chiamato Trasmettami, saremo non passa solo il messaggio, ma al quindi la stanza corrente ...

Il .addMessage restituirà due valori per ogni client, uno è il messaggio, l'altro è una stanza ... Ora confronteremo la 'stanza' restituita alla stanza corrente del cliente. Una volta che corrispondono, il messaggio verrà visualizzato in quella stanza corrente:

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

Questo approccio funziona, ma invia il messaggio a tutti i client connessi. Utilizzando i Gruppi puoi raggiungere solo i client connessi a una stanza specifica. –