GameKit w iPhone SDK 3.0

Czy muszę używać Peer Picker , aby znaleźć peerów w nowym iPhone SDK 3.0?

Naprawdę nie chcę z niego korzystać, ale chcę korzystać z połączenia Bluetooth peer-to-peer. Czy istnieje przykładowy kod, który demonstruje połączenie Bluetooth bez użycia Peer Picker? Gra GKTank , którą dostarcza Apple, używa Peer pickera, więc nie mogę tego użyć.

Author: Peter Mortensen, 2009-06-26

2 answers

Można to zrobić na dwa sposoby.

Pierwszy sposób korzysta z API GameKit. Zaczynasz od posiadania dwóch oddzielnych klas, jednej implementującej protokół GKSessionDelegate i działającej jako "handler" GameKit/Bluetooth, a drugiej jako interfejs prezentacji (najprawdopodobniej jakiś kontroler widoku z widokiem tableview). Sposób, w jaki można go podłączyć, to obsługa zarządza powiadomieniami GameKit itp., a następnie wywołuje metody delegatów w interfejsie użytkownika, aby zaktualizować widok tabeli, gdy peer łączy się/odpada, itp. Tędy., gdy urządzenia pojawiają się i znikają, Lista wyboru powinna zostać zaktualizowana, aby pokazać, kto jest w pobliżu.

Poniżej znajduje się kod na początek:

- (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);           
}
Drugim sposobem jest użycie standardowych mechanizmów wyboru usługi Bonjour. GameKit jest realizowany na górze Bonjour (ale przez Bluetooth zamiast WiFi), więc gdy obie strony przeszły przez osiągalność sieci ze sobą i połączone są zarejestrowane w Bonjour i działać jak każda usługa Bonjour będzie. Sposób GameKit jest prawdopodobnie trochę łatwiejsze, ale jeśli masz już kod do WiFi, można go ponownie wykorzystać również dla Bluetooth.
 12
Author: Ramin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-26 15:19:39

Dlaczego nie chcesz go używać?

Nie wiem, czy jest sposób na bezpośrednie połączenie bluetooth, i stanowi alternatywę dla znalezienia połączeń innymi środkami. Zapewnia całkiem ładny system do skonfigurowania sieci między wieloma iPod / dotknięcia, i pozwala określić, czy relacja jest naprawdę peer lub master / slave...

 -2
Author: Kendall Helmstetter Gelner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-26 14:48:07