Frage

Sie I Notwendigkeit zu verwenden, um die Peer Picker finden Peers in dem neuen iPhone SDK 3.0?

Ich will nicht wirklich, es zu benutzen, aber ich will die Peer-to-Peer-Bluetooth-Verbindung verwenden. Gibt es einen Beispielcode, der die Bluetooth-Verbindung zeigt, ohne Peer Picker mit? Das Spiel GKTank , dass Apple bietet verwendet die Peer Picker , so kann ich nicht verwenden.

War es hilfreich?

Lösung

Es gibt zwei Möglichkeiten, dies zu tun.

Der erste Weg verwendet GameKit API. Sie beginnen mit zwei getrennten Klassen mit, einer, der das GKSessionDelegate Protokoll und agiert als GameKit / Bluetooth „Handler“ und die andere als die Darstellung UI (höchstwahrscheinlich eine Art von Viewcontroller mit einem Tableview) implementiert. Die Art und Weise Sie es verdrahten würde bis der Handler die GameKit Meldungen usw. verwaltet und ruft dann Delegatmethoden auf der Benutzeroberfläche der Tabellen-Ansicht zu aktualisieren, wenn ein Peer-Verbindung / abfällt, usw. Auf diese Weise als Geräte kommen und gehen, Ihre Kommissionierer Liste aktualisieren soll zeigen, wer sich um.

Im Folgenden finden Sie einige Codes zum Einstieg:

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

Der zweite Weg, es zu tun ist, Standard-Bonjour-Dienst Auswahlmechanismen zu verwenden. GameKit ist oben auf Bonjour implementiert (aber über Bluetooth statt WiFi) so einmal die beiden Seiten durch Netzwerkerreichbarkeit miteinander gegangen sind und verbunden sind sie unter Bonjour registriert und funktionieren wie Bonjour-Dienst würde. Der GameKit Weg ist wahrscheinlich ein wenig leichter, aber wenn Sie bereits Code für WiFi haben es kann auch für Bluetooth wiederverwendet werden.

Andere Tipps

Warum wollen Sie nicht, es zu benutzen?

Ich weiß nicht, gibt es eine Möglichkeit, direkt eine Bluetooth-Verbindung selbst zu tun, und es stellt eine Alternative für Verbindungen mit anderen Mitteln zu finden. Es bietet ein nettes System ein Netzwerk zwischen einer Anzahl von iPod / Touches einzurichten, und können Sie festlegen, ob die Beziehung wirklich ist Peer oder Master / Slave ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top