Pregunta

Hago necesidad el uso de la Peer Selector De para encontrar compañeros en el nuevo iPhone SDK 3.0?

Yo realmente no quiero usarlo, pero quiero usar el peer-to-peer conexión Bluetooth.Hay algún código de ejemplo que muestra la conexión Bluetooth sin necesidad de utilizar Pares Selector?El juego GKTank que proporciona Apple utiliza los Pares Selector, por lo que no puedo usar eso.

¿Fue útil?

Solución

Hay dos maneras de hacer esto.

El primero usa GameKit de la API.Empezar por tener dos clases distintas, que implementa el GKSessionDelegate protocolo y actúa como un GameKit/Bluetooth "controlador" y el otro como la presentación de la interfaz de usuario (probablemente algún tipo de viewcontroller con un formato tableview).La forma de alambre para arriba es el controlador gestiona el GameKit de las notificaciones y, a continuación, llama a los métodos de delegado en la interfaz de usuario para actualizar la vista de tabla cuando un compañero se conecta/cae, etc.De esa manera, como a los dispositivos de ir y venir, su selector de lista deben actualizar para mostrar que hay alrededor.

A continuación se presenta el código para empezar:

- (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 segunda forma de hacerlo es utilizar el estándar de servicio Bonjour mecanismos de selección.GameKit se implementan en la parte superior de Bonjour (pero a través de Bluetooth en lugar de WiFi) para que una vez que los dos lados se han ido a través de la accesibilidad de la red uno con el otro y conectados están registrados bajo Bonjour y actuar como cualquier Bonjour servicio.El GameKit es probablemente un poco más fácil, pero si ya tienes el código para WiFi puede ser reutilizada para el Bluetooth.

Otros consejos

¿Por qué no quieres usarlo?

No sé si hay una manera de hacer una conexión Bluetooth directamente, y presenta una alternativa para encontrar conexiones por otros medios. Proporciona un sistema bastante agradable para configurar una red entre varios iPod / Touches, y le permite definir si la relación es realmente par o maestro / esclavo ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top