2012-05-18 19 views
7

मैं एक परियोजना के लिए सिग्नलआर देख रहा हूं जिस पर मैं काम कर रहा हूं, और ऐसा लगता है कि मैं वास्तव में क्या चाहता हूं। हालांकि एक बिट जो मैं अभी भी थोड़ा परेशान हूं, समूह है और शामिल है।सिग्नलआर और समूह में शामिल होने

मैं पहले कार्यान्वयन के संदर्भ का वर्णन करने की कोशिश करूंगा। तो मौजूदा सिस्टम के भीतर एक उपयोगकर्ता किसी दिए गए विषय के बारे में एक बैठक आयोजित करना चाहता है और उसके बाद दिए गए नाम/पहचानकर्ता के साथ एक कमरा तैयार करेगा, फिर वे दूसरों को इसमें आमंत्रित करेंगे और फिर यह मूल रूप से एक निजी चैट रूम की तरह होगा।

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

अब मैं प्रलेखन से देखता हूं कि एक जॉइन और डिसकनेक्ट विधि है जिसे आप किसी समूह में रखने के लिए हुक कर सकते हैं, हालांकि ऐसा लगता है कि जॉइन में क्वेरी स्ट्रिंग के अलावा इसके साथ कोई संदर्भ नहीं है, इसलिए मैं जो कुछ भी शामिल हो जाता है, उसके बारे में थोड़ा उलझन में हूं, क्योंकि मुझे उम्मीद है कि यह क्लाइंट पर मैन्युअल रूप से ट्रिगर की गई विधि होगी जिसमें कुछ ऑब्जेक्ट को संदर्भित किया जा रहा है कि संदर्भ में उन्हें किस कमरे में रखा जाए, क्योंकि आपके पास सैकड़ों निजी कमरे हो सकते हैं।

तो आप कैसे शामिल हों विधि को कुछ संदर्भ देते हैं, और एक डिस्कनेक्ट करते हैं, इसलिए वे जानते हैं कि आप किस कमरे में शामिल होने का अनुरोध कर रहे हैं, जैसे कि मैन्युअल रूप से ट्रिगर नहीं किया गया है कि आप क्वेरी स्ट्रिंग कैसे सेट कर सकते हैं, और यदि यह है मैन्युअल रूप से ट्रिगर किया गया क्यों आप कस्टम ऑब्जेक्ट पर नहीं भेज सकते हैं। यानी

public Task Join() 
{ 
    var groupName = Context.QueryString["some-room-identifier"]; 
    return Groups.Add(Context.ConnectionId, groupName); 
} 

बनाम

public Task Join(string groupName) 
{ 
    return Groups.Add(Context.ConnectionId, groupName); 
} 

तो मैं कुछ याद आ रही है या वहाँ किसी तरह उन्हें सही जगह पहली बार में डालने के लिए एक में शामिल होने के उपयोगकर्ता के लिए संदर्भ देने के लिए है?

उत्तर

8

मेरे पास आपके जैसा ही अनुभव है और मैंने इसके माध्यम से काम किया है/जिस तरह से काम किया है, इसलिए मैं जो कुछ भी कर चुका हूं उसे साझा करूंगा।

आपको कहीं और राज्य कैप्चर करने की आवश्यकता होगी। क्लाइंट से सर्वर पर Roundtripping के तहत सिग्नलआर हब्स विकी https://github.com/SignalR/SignalR/wiki/Hubs देखें। मैंने पाया कि यह उपयोगी है क्योंकि यह आपको सर्वर हब या क्लाइंट पर स्थिति सेट करने और दूसरे छोर पर पुनर्प्राप्त करने के बारे में बताता है।

मैं आपके जैसा ही निष्कर्ष आया, कि कुछ ईवेंट द्वारा जॉइन मैन्युअल रूप से ट्रिगर किया गया है। मैं यह देखने के लिए एक सर्वेक्षण का उपयोग कर रहा हूं कि किसी ने उपयोगकर्ता के साथ चैट का अनुरोध किया है या नहीं। तुम वास्तव में, सर्वर (SignalR Join Group From Controller देखें) से धक्का कर सकते हैं जिसका अर्थ है कि नियंत्रक कार्रवाई हैंडल है कि एक नए चैट संदेश जोड़ने हब के Join विधि कॉल कर सकते हैं: अपने समूह के नाम के लिए

// join chatroom 
public Task Join(dynamic mygroup) 
{ 
var groupName = groupy.GetGroupName(parent.userId, (int)mygroup.userIdTo); 
return Groups.Add(Context.ConnectionId, groupName); 
} 

, मैं एक सिंगलटन का उपयोग उत्पन्न करने के लिए और Dictionary<string, int[]> (int[] उपयोगकर्ता आईडी के लिए) का उपयोग कर नामों का ट्रैक रखें।

क्लाइंट राज्य सामग्री के लिए, मैंने एक कस्टम जावास्क्रिप्ट ऑब्जेक्ट बनाना समाप्त कर दिया जिसने समूह नाम को प्रबंधित किया, इस तरह ...

public dynamic GetOurGroup(dynamic mygroup) 
{ 
var ourId = groupy.GetGroupName(parent.userId, (int)mygroup.UserIdTo); 
mygroup.GroupId = ourId;      
return mygroup; 
} 

आशा है कि यह कम से कम है:

Chat.Chatgroup = function (groupId, userIdTo) { 
this.GroupId = groupId; // our group's title/id 
this.UserIdTo = userIdTo; // who the other user is 
} 

तब मैं

onechat.getOurGroup(mygroup) // invoke method on server 
.done(function (response) { 
mygroup = response; 
/* + whatever else you need to do*/ }); 

जोड़ने अब आप सर्वर पर एक राज्य की स्थापना की और ग्राहक पर है कि राज्य धारण कर सकते हैं के बाद signalR विधि कॉल अस्पष्ट मददगार!

+0

धन्यवाद सभी उपयोगी चीजें, मैं इसे इस पल के उत्तर के रूप में नहीं रखूंगा लेकिन आपको उपयोगीता के लिए वोट दूंगा। अधिक लोगों की उम्मीद है कि समय के साथ में झुकाव होगा। – Grofit

+0

हाँ, यह नई चीजें है, जैसा कि हम सीखते हैं हम – testpattern

+0

+1 को परिष्कृत करेंगे। मुझे लगता है कि यह एकमात्र तरीका है कि सिग्नलआर एक एपीआई प्रदान नहीं करता है जो कनेक्शन आईडी को समूह नाम देता है। – GETah

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