سؤال

أحاول تنفيذ تطبيق P2P. ما أحاول القيام به هو نقل بيانات فئة NSOBJECT مخصصة بين الأجهزة. أنا غير قادر على معرفة متى يتم استدعاء طريقة "المستلزمات" بواسطة gksession.

إليك ما فعلته

  1. الاتصال المعتاد وإظهار مربع حوار مع أقرانه

  2. عندما يتلقى التطبيق تغيير حالة بالنسبة للنظير، فإن الحالة متصلة، فأنا أرسل البيانات إلى جميع أقرانها (من الناحية المثالية يجب أن يتم استدعاء ذلك عندما يقبل كل نظير الاتصال) باستخدام طرق NSCODING

  3. في المستلزمات، أنا فكفي NSDATA وأعد مثيل NSOBJECT

المشكلة هي الجلسة: الأقران: Didchangestate: لا يتم استدعاء الأسلوب كل من الأجهزة. يتم استدعاء فقط الجهاز الذي استغلال زر "Connect" في تنبيه Peerpicker.

أسئلة

  1. متى يدعى didchangestate ولمن؟ لا ينبغي أن يطلق عليه كل نظير عندما تكون مرتبطة؟

  2. متى يتم الاستلام: الطريقة التي تسمى ولمن؟ هل تم استدعاؤه لتأكيد استلام رسالة (مصافحة) أو فقط لإرسال البيانات المرسلة من قبل أقران الآخرين؟

شكرا على اي مساعدة.

هل كانت مفيدة؟

المحلول

فكر في الأمر أكثر مثل "ماجستير / عبدا" بدلا من "نظير إلى نظير". من المفترض أن كلا الجانبين قد تم تأسيسها مع Gamekit وتم تعيين مندوبيهم. يخطر الجانب الآخر الذي يبدأ الاتصال عبر GKPeerStateConnected قيمة تغيير الحالة التي قبلها المتلقي الدعوة وتم إجراء اتصال حتى تتمكن من البدء في إرسال الأشياء.

ومع ذلك، يحصل الجانب الاستقبال على إشعاره الأول بأن شخصا ما يريد التحدث إليه من خلال didReceiveConnectionRequestFromPeer طريقة المندوب. أنه يوفر الجلسة للاستخدام لاحقا ثم يتحول حولها والمكالمات acceptConnectionFromPeer لقبوله. من ذلك الحين، يحصل كل شيء يتم إرساله عبر receiveData طريقة.

أفضل طريقة للقيام بذلك هي أن يكون لها آلة الحالة الصغيرة التي تدير الحالة التي يقوم بها كل جانب. يرسل المرسل فقط عند الحصول على GKPeerStateConnected حدث. يتم وضع جهاز الاستقبال connected الحالة بمجرد أن تقبل طلب اتصال بحيث يمكن القيام بأي إعداد يحتاج إليه قبل أن يبدأ في الحصول على البيانات.

منذ تجريد الشبكة GKSession يمكن أن يستدير المتلقي ثم استخدم نفس مثيل الجلسة التي حصلت عليها didReceiveConnectionRequestFromPeer واستخدامها للكتابة مرة أخرى إلى المرسل (الذي يجب أن يكون له receiveData طريقة تسمى الردود من جهاز الاستقبال).

الشيء الوحيد الذي يجب مراعاته هو أنه يوجد حد لحجم البيانات الضمني على المخزن المؤقت الذي يمكنك إرساله عبر GameKit. قد ترغب في تجربة العثور على ما هو من أجل نظامك (أحصل على شيء ما بين 5K و 10K - لسبب ما يختلف). قد ترغب في الحصول على رمز لتقسيم NSDATA الخاص بك إلى قطع وإدارة الحزم / devacking the البيانات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top