سؤال

هل أنا <م> الحاجة لاستخدام في المنتقى الأقران ليجد أقرانه في اي فون الجديد SDK 3.0؟

وأنا لا حقا ترغب في استخدامه، ولكن أنا لا أريد أن استخدام اتصال Bluetooth الند للند. هل هناك أي رمز نموذج يوضح اتصال بلوتوث دون استخدام المنتقى الأقران؟ لعبة GKTank أن أبل يوفر تستخدم لاقط الأقران ، لذلك لا يمكن استخدام ذلك.

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

المحلول

وهناك طريقتان للقيام بذلك.

والطريقة الأولى تستخدم GameKit API. عليك أن تبدأ من خلال وجود فئتين منفصلتين، واحدة التي تطبق بروتوكول GKSessionDelegate وبمثابة GameKit / بلوتوث "معالج" والآخر كما عرض واجهة المستخدم (على الأرجح نوعا من viewcontroller مع tableview). الطريقة التي سوف سلك عنه هو معالج يدير الإخطارات GameKit الخ ومن ثم يدعو وسائل مندوب على واجهة المستخدم لتحديث طريقة عرض جدول عندما يتصل الأقران / تنخفض، وما إلى ذلك وبهذه الطريقة، كما تأتي الأجهزة وتذهب، وقائمة منقار الخاص بك يجب تحديث لإظهار من هو حولها.

وفيما يلي بعض التعليمات البرمجية للحصول على انك بدأته:

- (BOOL) startPeer
{
    BOOL result = NO;

    if (!_session) {
        _session = [[GKSession alloc] initWithSessionID:BLUETOOTHSESSION 
                                                displayName:nil 
                                                sessionMode:GKSessionModePeer];
        _session.delegate = self;
        [_session setDataReceiveHandler:self withContext:nil];
        _session.available = YES;
    result = YES;
    }
    return result;
}

- (void) stopPeer
{
    // Set up the session for the next connection
    //
    [_session disconnectFromAllPeers];
    _session.available = YES;

    [self cleanupProgressWindow];
}

- (void) loadPeerList 
{
    self.peerList = [[NSMutableArray alloc] initWithArray:[_session peersWithConnectionState:GKPeerStateAvailable]];
}


- (void)session:(GKSession *)session peer:(NSString *)peerID didChangeState:(GKPeerConnectionState)state
{
    BOOL peerChanged = NO;

    switch(state) {

        // When peer list changes, we adjust the available list
        //
        case GKPeerStateAvailable:
            if (_peerList) {
                [_peerList addObject:peerID];
                peerChanged = YES;
            }
            break;

        // When peer list changes, we adjust the available list
        //
        case GKPeerStateUnavailable:
            if (_peerList) {
                [_peerList removeObject:peerID];
                peerChanged = YES;
            }
            break;


        // Called when the peer has connected to us.
        //
        case GKPeerStateConnected:
                    // start reading and writing
            break;

        case GKPeerStateDisconnected:
        {
            if (_isWriter) {
                _isConnected = NO;
                _deviceToSend = nil;
                [self cleanupProgressWindow];
            } else {
                // Other side dropped, clean up local data and reset for next connection
                self.dataRead = nil;
            }
        }
            break;
    }

    // Notify peer list delegate that the list has changed so they can update the UI
    //
    if (peerChanged)
        CALLDELEGATE(_peerListDelegate, peerListChanged);           
}

والطريقة الثانية للقيام بذلك هو استخدام آليات اختيار مستوى الخدمة صباح الخير. ويتم تنفيذ GameKit على رأس صباح الخير (ولكن عبر تقنية Bluetooth بدلا من واي فاي) وذلك مرة واحدة ذهبت الجانبين من خلال وسائل الأتصال الشبكة مع بعضها البعض ومتصلة كانت مسجلة تحت صباح الخير وتتصرف مثل أي خدمة صباح الخير شأنه. الطريق GameKit وربما أسهل قليلا، ولكن إذا كان لديك بالفعل رمز واي فاي يمكن إعادة استخدامها للبلوتوث كذلك.

نصائح أخرى

لماذا لا تريد استخدامه؟

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

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