GameKit в iPhone SDK 3.0

Я согласен с замечаниями dnmckee, а также:

  • Статически связанные приложения могут быть проще в развертывании, поскольку существует меньше или нет дополнительных зависимостей файлов (.dll / .so), которые могут вызвать проблемы, когда они отсутствуют или установлены не в том месте.
7
задан Peter Mortensen 17 May 2012 в 10:59
поделиться

2 ответа

Это можно сделать двумя способами.

Первый способ использует GameKit API. Вы начинаете с двух отдельных классов, один из которых реализует протокол GKSessionDelegate и действует как «обработчик» GameKit / Bluetooth, а другой - как пользовательский интерфейс представления (скорее всего, своего рода контроллер представления с табличным представлением). Способ, которым вы его подключаете, - это обработчик управляет уведомлениями GameKit и т. Д., А затем вызывает методы делегата в пользовательском интерфейсе для обновления представления таблицы, когда одноранговый узел подключается / отключается и т.д. Таким образом, когда устройства приходят и уходят, ваш список выбора должен обновиться, чтобы показать, кто рядом.

Ниже приведен код для начала:

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

Второй способ сделать это - использовать стандартные механизмы выбора службы Bonjour. GameKit реализован поверх Bonjour (но через Bluetooth вместо Wi-Fi), поэтому после того, как две стороны прошли через сетевую доступность друг к другу и подключились, они регистрируются в Bonjour и действуют как любая служба Bonjour. Метод GameKit, вероятно, немного проще, но если у вас уже есть код для WiFi, его можно повторно использовать и для Bluetooth.

12
ответ дан 7 December 2019 в 01:25
поделиться

Почему вы не хотите его использовать?

Я не знаю, есть ли способ напрямую установить соединение Bluetooth самостоятельно, и он представляет собой альтернативу для поиска соединений другими способами. Он предоставляет довольно удобную систему для настройки сети между несколькими iPod / Touch и позволяет вам определить, является ли отношение одноранговым или главным / подчиненным ...

-2
ответ дан 7 December 2019 в 01:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: