ios - Client GKSession think it's connected after denyConnectionFromPeer -


मेरे पास एक विशिष्ट GKSessionModeServer / GKSessionModeClient सेटअप है।

जब सर्वर denyConnectionFromPeer: , ग्राहक के सत्र: connectionWithPeerFailed: विधि के साथ एक ग्राहक कनेक्शन प्रयास से इनकार करते हैं, लेकिन फिर इसे एक GKPeerStateConnected राज्य में परिवर्तन के साथ मेरे सर्वर के पीअरआईडी दूसरे शब्दों में, ग्राहक सोचता है कि कनेक्शन सफल नहीं होता, जबकि सर्वर नहीं करता है।

यह सामान्य ज्ञान और connectToPeer: withTimeout: के दस्तावेजों के साथ बाधाओं पर प्रतीत होता है, जो कहता है < / P>

अगर दूरदराज के सहकर्मी से संबंध सफल होता है, तो प्रतिनिधि सत्र: पीअर: didChangeState: विधि को प्रत्येक सहकर्मी के लिए बुलाया जाता है जो इसे सफलतापूर्वक से जुड़ा हुआ है। यदि कनेक्शन विफल हो जाता है या आपका अनुप्रयोग कनेक्शन का प्रयास रद्द करता है, तो सत्र कॉल करने वाला प्रतिनिधि है सत्र: connectionWithPeerFailed: withError: विधि।

मुझे पता है यह नहीं कहता कि राज्य परिवर्तन कॉलबैक नहीं को कनेक्शन विफलता के मामले में बुलाया जाएगा, लेकिन क्लाइंट के दृष्टिकोण से शुद्ध परिणाम यह है कि एक असफल कनेक्शन एक के परिणामस्वरूप दिखाई देता है सफल कनेक्शन।

स्ट्रॉइंग पर क्लचिंग मैंने cancelConnectToPeer से connectionWithPeerFailed कॉलबैक, बिना परिणाम के कॉल करने की कोशिश की।

ग्राहक काम कर सकता है इसके आसपास अगले GKPeerStateConnected की अनदेखी करके, लेकिन यह क्लुडेजी है और फिर से कनेक्ट होने पर सर्वर को कनेक्शन फिर से स्वीकार करना शुरू करने पर जटिलताएं जुड़ी हुई हैं।

तो क्लाइंट सत्र क्यों नहीं समझ सकता कि यह खत्म हो गया है?

मैंने अपने आप को एक ही प्रकार का अनुप्रयोग डिज़ाइन किया है ( GKSessionModeServer / G2Cession ModeClient )। जब आप किसी सहकर्मी के संबंध से इनकार करते हैं, तो यह सत्र को ट्रिगर करेगा: सहकर्मी: किया गया स्थान: प्रतिनिधि को GKPeerConnectionState तर्क के साथ GKPeerStateDisconnected पर सेट किया गया है। आपको अपने कोड में इसे ठीक से व्यवस्थित करने की ज़रूरत है - मुझे उस भाग के साथ कभी भी कोई समस्या नहीं हुई है।

Comments