2012-06-24 19 views
5

Bir sohbet uygulaması oluşturmayı planlıyorum ve okudum en iyi teknolojilerden biri olan SignalR.SignalR çoklu sohbet odaları

Bunun örneklerini gördüm, ancak sadece tek bir sohbet odası var.

Birden çok sohbet odasına sahip olmak istiyorum. Kullanıcı sadece bu sohbet odalarından birini seçecektir.

Ben bir acemi olmama rağmen, ben SignalR tek sohbet odası oluşturmak için düşünüyorum bu gereğidir:

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

var bağlantısı = tek sohbet odası (emin değilim) Yani

Çok fazla bağlantım varsa (örneğin, bağlantı1, bağlantı2, bağlantı3 ....) birden çok sohbet odası olabilir mi? Bu doğru ise

kez daha, emin değilim ... ... çoklu sohbet odaları nasıl uygulanacağı konusunda bana yardım edin

(Not: Ben JABBR gördük, ama onun kod burnumu yapıyor Basit örnekler verebilir misiniz, lütfen?)

cevap

14

Sen, sadece bir tane birden fazla bağlantı açmak gerekmez, ancak Group kullanmak:

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

Bir grup bir oda, bir kullanıcı bir oda katılır bu yüzden her zaman demektir, sadece o kullanıcı eklemek Bu odanın grubunu ve mesaj yayınlamak istediğinizde, mesajı sadece gruptaki istemcilere gönderin.

Diğer ayrıntılar: https://github.com/SignalR/SignalR/wiki/Hubs

+0

yardımcı olabilir, ancak Görev –

-1

Birden çok bağlantıya ihtiyacınız yoktur. Sadece bir tanesini kullanın ve meta verileri geri gönderilen JSON mesajına, mesajın hangi oda için olduğunu belirtin. JavaScript kodunun daha sonra mesajı doğru odaya yönlendirmesi gerekiyor.

+0

Birden fazla oda nasıl ayarlanacağını bilmiyorum. Kodun hangi bölümünü değiştirmem gerekecek? –

+0

Çevrimdışı sohbet odalarının bazı çalışma örneklerini veya demolarını görmek için, http://talkwithstranger.com/free-chat-rooms – Faizan

1

Tamam ... İşte birden fazla oda yapmak için en basit yolu şudur:

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

Ben mevcut oda bir açılır liste ve seçilen oda değeri olacaktır

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

Artık her zaman `s denir, sadece mesaj değil geçer, ama diğerleri olacak: bir elemanın, haydi bir metin kutusu diyelim öyleyse mevcut oda ...

.addMessage, her alıcıya iki değer döndürecek, biri mesaj, diğeri ise bir oda ... Şimdi geri döndüğümüz 'oda' ile odanın istemcisi. Eşleştiklerinde, o andaki odada mesaj görüntülenir:

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

ile nasıl çalışacağımı bilmiyorum Bu yaklaşım, ancak mesajı tüm bağlı istemcilere gönderir. Grupları kullanarak sadece belirli bir odaya bağlı istemcilere ulaşabilirsiniz. –