Domanda

Devo aver bisogno di usare Selezione peer per trovare colleghi nel nuovo iPhone SDK 3.0?

Non voglio davvero usarlo, ma voglio usare la connessione Bluetooth peer-to-peer. Esiste un codice di esempio che dimostri la connessione Bluetooth senza utilizzare Peer Picker? Il gioco GKTank che Apple fornisce utilizza Peer Picker , quindi non posso usarlo.

È stato utile?

Soluzione

Esistono due modi per farlo.

Il primo modo utilizza l'API GameKit. Si inizia con due classi separate, una che implementa il protocollo GKSessionDelegate e funge da GameKit / Bluetooth & Quot; gestore & Quot; e l'altro come l'interfaccia utente della presentazione (molto probabilmente una sorta di viewcontroller con una vista tabella). Il modo in cui lo collegheresti è che il gestore gestisce le notifiche di GameKit ecc. E quindi chiama i metodi delegati sull'interfaccia utente per aggiornare la vista della tabella quando un peer si collega / si disconnette, ecc. In questo modo, man mano che i dispositivi vanno e vengono, l'elenco di selezione dovrebbe aggiornare per mostrare chi c'è in giro.

Di seguito è riportato un codice per iniziare:

- (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);           
}

Il secondo modo per farlo è usare i meccanismi standard di selezione del servizio Bonjour. GameKit è implementato su Bonjour (ma tramite Bluetooth anziché WiFi), quindi una volta che le due parti hanno attraversato la raggiungibilità della rete tra loro e connesse sono registrate sotto Bonjour e si comportano come farebbe qualsiasi servizio Bonjour. Il modo GameKit è probabilmente un po 'più semplice, ma se hai già un codice per WiFi può essere riutilizzato anche per Bluetooth.

Altri suggerimenti

Perché non vuoi usarlo?

Non so che c'è un modo per fare direttamente una connessione bluetooth da solo, e rappresenta un'alternativa per trovare connessioni con altri mezzi. Fornisce un sistema piuttosto carino per impostare una rete tra un numero di iPod / Touch e ti consente di definire se la relazione è veramente peer o master / slave ...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top