2012-06-24 18 views
5

मैं चैट एप्लिकेशन बनाने की योजना बना रहा हूं, और मैंने पढ़ा है कि SignalR लागू करने वाली सर्वोत्तम तकनीकों में से एक है।सिग्नलआर एकाधिक चैट रूम

मैंने इसके उदाहरण देखे हैं, लेकिन उनके पास केवल एक चैट रूम है।

मैं कई चैट रूम चाहता हूं। उपयोगकर्ता बस उन चैट रूम में से एक का चयन करेगा।

हालांकि मैं अभी शुरुआत कर रहा हूँ, मैं SignalR में एक भी चैट रूम बनाने के लिए लगता है कि यह कर रहा है:

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

वर कनेक्शन = एकल चैट रुम (मुझे यकीन है कि नहीं कर रहा हूँ)

तो अगर मेरे पास कई कनेक्शन हैं (उदाहरण के लिए, कनेक्शन 1, कनेक्शन 2, कनेक्शन 3 ....) मेरे पास एकाधिक चैट रूम हो सकते हैं?

एक बार फिर, मुझे यकीन है कि अगर यह सही है नहीं कर रहा हूँ ... कृपया मुझे कैसे कई कमरे चैट को लागू करने पर मदद ...

(पुनश्च: मैं JABBR देखा है, लेकिन अपने कोड मेरी नाक बना रही है खून बह रहा है। क्या आप सरल उदाहरण प्रदान कर सकते हैं?)

उत्तर

14

आप एक से अधिक कनेक्शन को खोलने के लिए सिर्फ एक ही नहीं है, लेकिन 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); 
    } 
} 

एक समूह एक कमरे है, तो हर बार एक उपयोगकर्ता एक कमरे मिलती है इसका मतलब है, तुम बस के लिए है कि उपयोगकर्ता को जोड़ने उस कमरे का समूह, और जब आप संदेश प्रसारित करना चाहते हैं, तो बस समूह में ग्राहकों को संदेश भेजें।

अधिक विवरण: https://github.com/SignalR/SignalR/wiki/Hubs

+0

सहायक मदद करेगा, लेकिन मुझे नहीं पता कि कार्य –

-1

आपको एकाधिक कनेक्शन की आवश्यकता नहीं है। बस एक का उपयोग करें और लौटा JSON संदेश में मेटा डेटा डालें क्योंकि संदेश किस कमरे के लिए है। जावास्क्रिप्ट कोड को तब संदेश को सही कमरे में निर्देशित करने की आवश्यकता होती है।

+0

मुझे नहीं पता कि कई कमरे कैसे सेट करें। कोड का कौन सा हिस्सा मुझे संशोधित करने की आवश्यकता होगी? –

+0

कुछ चैट उदाहरण ऑनलाइन या मुफ्त चैट रूम के डेमो देखने के लिए, यह आपको http://talkwithstranger.com/free-chat-rooms – Faizan

1

ठीक है ... यहाँ कई कमरे बनाने के लिए सबसे आसान तरीका है:

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

मैं उपलब्ध कमरों एक ड्रॉपडाउन सूची है, और चयनित कक्ष मान होगा

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

अब, हर बार .send कहा जाता है, हम सिर्फ संदेश नहीं पारित करेंगे, लेकिन अल: एक तत्व की, के एक पाठ बॉक्स मान लीजिए तो वर्तमान कमरा ...

.addMessage प्रत्येक ग्राहक को दो मान वापस कर देगा, एक संदेश है, दूसरा कमरा है ... अब हम लौटे 'कमरे' की तुलना वर्तमान कमरे में करेंगे ग्राहक। एक बार जब वे मेल खाते हैं, तो संदेश उस वर्तमान कमरे में प्रदर्शित होगा:

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

के साथ कैसे काम करना है यह दृष्टिकोण काम करता है, लेकिन यह सभी जुड़े ग्राहकों को संदेश भेजता है। समूह का उपयोग करके आप केवल एक विशिष्ट कमरे से जुड़े ग्राहकों तक पहुंच सकते हैं। –

संबंधित मुद्दे