7 votes

GameKit dans iPhone SDK 3.0

Est-ce que je besoin de pour utiliser le Peer Picker pour trouver des pairs dans le nouveau iPhone SDK 3.0 ?

Je n'ai pas vraiment envie de l'utiliser, mais je veux utiliser la connexion Bluetooth pair-à-pair. Existe-t-il un exemple de code qui démontre la connexion Bluetooth sans utiliser Peer Picker ? Le jeu GKTank que Apple fournit utilise le Peer Picker, donc je ne peux pas l'utiliser.

12voto

Ramin Points 10412

Il y a deux façons de procéder.

La première méthode utilise l'API GameKit. Vous commencez par avoir deux classes distinctes, l'une qui implémente la fonction GKSessionDelegate et agit comme un "gestionnaire" GameKit/Bluetooth, et l'autre comme l'interface utilisateur de présentation (très probablement une sorte de contrôleur de vue avec une vue de table). Le gestionnaire gère les notifications GameKit, etc. et appelle ensuite des méthodes déléguées sur l'interface utilisateur pour mettre à jour la vue du tableau lorsqu'un pair se connecte/dépose, etc. De cette façon, au fur et à mesure que les appareils vont et viennent, votre liste de sélection devrait se mettre à jour pour montrer qui est là.

Vous trouverez ci-dessous un code pour vous aider à démarrer :

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

La deuxième façon de procéder consiste à utiliser les mécanismes standard de sélection des services Bonjour. GameKit est implémenté au-dessus de Bonjour (mais via Bluetooth au lieu de WiFi). Ainsi, une fois que les deux parties ont vérifié la disponibilité du réseau l'une par rapport à l'autre et se sont connectées, elles sont enregistrées sous Bonjour et agissent comme n'importe quel service Bonjour. La méthode GameKit est probablement un peu plus simple, mais si vous avez déjà du code pour le WiFi, vous pouvez le réutiliser pour le Bluetooth.

-2voto

Pourquoi ne voulez-vous pas l'utiliser ?

Je ne sais pas s'il y a un moyen de faire directement une connexion bluetooth soi-même, et cela présente une alternative pour trouver des connexions par d'autres moyens. Il fournit un système assez agréable pour mettre en place un réseau entre un certain nombre d'iPod/Touches, et vous permet de définir si la relation est vraiment pair ou maître/esclave...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X