iPhone - كيف يتم نقل البيانات في P2P
-
23-08-2019 - |
سؤال
أحاول تنفيذ تطبيق P2P. ما أحاول القيام به هو نقل بيانات فئة NSOBJECT مخصصة بين الأجهزة. أنا غير قادر على معرفة متى يتم استدعاء طريقة "المستلزمات" بواسطة gksession.
إليك ما فعلته
الاتصال المعتاد وإظهار مربع حوار مع أقرانه
عندما يتلقى التطبيق تغيير حالة بالنسبة للنظير، فإن الحالة متصلة، فأنا أرسل البيانات إلى جميع أقرانها (من الناحية المثالية يجب أن يتم استدعاء ذلك عندما يقبل كل نظير الاتصال) باستخدام طرق NSCODING
في المستلزمات، أنا فكفي NSDATA وأعد مثيل NSOBJECT
المشكلة هي الجلسة: الأقران: Didchangestate: لا يتم استدعاء الأسلوب كل من الأجهزة. يتم استدعاء فقط الجهاز الذي استغلال زر "Connect" في تنبيه Peerpicker.
أسئلة
متى يدعى didchangestate ولمن؟ لا ينبغي أن يطلق عليه كل نظير عندما تكون مرتبطة؟
متى يتم الاستلام: الطريقة التي تسمى ولمن؟ هل تم استدعاؤه لتأكيد استلام رسالة (مصافحة) أو فقط لإرسال البيانات المرسلة من قبل أقران الآخرين؟
شكرا على اي مساعدة.
المحلول
فكر في الأمر أكثر مثل "ماجستير / عبدا" بدلا من "نظير إلى نظير". من المفترض أن كلا الجانبين قد تم تأسيسها مع Gamekit وتم تعيين مندوبيهم. يخطر الجانب الآخر الذي يبدأ الاتصال عبر GKPeerStateConnected
قيمة تغيير الحالة التي قبلها المتلقي الدعوة وتم إجراء اتصال حتى تتمكن من البدء في إرسال الأشياء.
ومع ذلك، يحصل الجانب الاستقبال على إشعاره الأول بأن شخصا ما يريد التحدث إليه من خلال didReceiveConnectionRequestFromPeer
طريقة المندوب. أنه يوفر الجلسة للاستخدام لاحقا ثم يتحول حولها والمكالمات acceptConnectionFromPeer
لقبوله. من ذلك الحين، يحصل كل شيء يتم إرساله عبر receiveData
طريقة.
أفضل طريقة للقيام بذلك هي أن يكون لها آلة الحالة الصغيرة التي تدير الحالة التي يقوم بها كل جانب. يرسل المرسل فقط عند الحصول على GKPeerStateConnected
حدث. يتم وضع جهاز الاستقبال connected
الحالة بمجرد أن تقبل طلب اتصال بحيث يمكن القيام بأي إعداد يحتاج إليه قبل أن يبدأ في الحصول على البيانات.
منذ تجريد الشبكة GKSession
يمكن أن يستدير المتلقي ثم استخدم نفس مثيل الجلسة التي حصلت عليها didReceiveConnectionRequestFromPeer
واستخدامها للكتابة مرة أخرى إلى المرسل (الذي يجب أن يكون له receiveData
طريقة تسمى الردود من جهاز الاستقبال).
الشيء الوحيد الذي يجب مراعاته هو أنه يوجد حد لحجم البيانات الضمني على المخزن المؤقت الذي يمكنك إرساله عبر GameKit. قد ترغب في تجربة العثور على ما هو من أجل نظامك (أحصل على شيء ما بين 5K و 10K - لسبب ما يختلف). قد ترغب في الحصول على رمز لتقسيم NSDATA الخاص بك إلى قطع وإدارة الحزم / devacking the البيانات.