2011-12-08 5 views
7

मैं सिंगलआर (https://github.com/SignalR/SignalR) का अध्ययन कर रहा हूं।सिग्नलर (हब) सिग्नल निर्माता को छोड़कर एक संदेश भेज सकता है?

मैं वास्तव में एक ईवेंट बनाने वाले व्यक्ति को छोड़कर सभी कनेक्शन पर एक संदेश भेजना चाहता हूं।

उदाहरण के लिए,

आवेदन चैटिंग में, वहाँ तीन ग्राहक (ए, बी, सी) है।

क्लाइंट एक प्रकार का संदेश, "हैलो" और क्लिक सबमिट करें।

ग्राहक.एडमेसेज (डेटा); सभी cleint को "हैलो" भेजने के लिए (शामिल cleint ए)

मैं "हैलो" केवल ग्राहक बी और सी

मैं इसे कैसे हासिल कर सकते हैं भेजना चाहते हैं?

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

@dfowler क्या आप मेरी मदद कर सकते हैं ^^? – ShootingStar

उत्तर

12

आज सर्वर पर संदेश फ़िल्टर करने का कोई तरीका नहीं है, लेकिन आप क्लाइंट पक्ष से कॉलर को संदेशों को अवरुद्ध कर सकते हैं। यदि आप सिग्नलर पर कुछ नमूने देखते हैं, तो आप देखेंगे कि वे प्रत्येक ग्राहक को एक विधि में क्लाइंट को जेनरेट की गई आईडी निर्दिष्ट करते हैं (आमतौर पर शामिल होने के लिए)। जब भी आप हब से एक विधि का आह्वान करते हैं, तो कॉलिंग क्लाइंट की आईडी पास करें, फिर ग्राहक पक्ष पर यह सुनिश्चित करने के लिए एक चेक करें कि ग्राहक की आईडी कॉलर के समान नहीं है। जैसे

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

क्लाइंट साइड

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

आशा है कि मदद करता है।

+0

मुझे लगता है कि यह मेरे लिए वास्तव में सहायक है। उत्तर देने के लिए आपका शुक्रिया। महान ढांचे के लिए भी धन्यवाद। तुम्हें आशीर्वाद देते हैं। – ShootingStar

+0

क्या आपके उत्तर के बाद आईडी संपत्ति बदल गई? मैं क्लाइंट पक्ष पर आईडी नहीं प्राप्त कर सकता, अपरिभाषित रिटर्न। –

5

अब में Clients.Others संपत्ति का उपयोग कर यह (v1.0.0) संभव है।

उदा। Clients.Others.addMessage(data) कॉलर को छोड़कर सभी ग्राहकों पर विधि addMessage पर कॉल करता है।

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

  • कोई संबंधित समस्या नहीं^_^