GKSessionModeServer モードで実行されている GKSession を使用してローカル ネットワーキングを行うアプリがあります。これは、このアプリを使用するときに 2 つのデバイスのみが接続されるように制限されています。
デバイスが互いに切断されない限り、すべての接続および通信コードは期待どおりに機能します。中断があった場合、デバイスが自動的に再接続されるようにします。切断イベントが発生した後にデバイスが自動的に再接続されるように、コードに取り組んでいます。
シミュレーターとデバイスで同時にアプリを実行できます。シミュレーターでアプリを一時停止すると、期待どおりに再接続されます (サーバーまたはクライアントとして実行されているかどうか)。実際のデバイス上のアプリ。
- (void)session:(GKSession *)session peer:(NSString *)peerID didChangeState:(GKPeerConnectionState)state
{
NSLog(@"Game: peer %@ changed state %d", peerID, state);
if (state == GKPeerStateDisconnected) {
if (_isServer) {
NSLog(@"Switching session ON");
_session.available = YES;
} else {
NSLog(@"Running a reconnection request");
[_session connectToPeer:peerID withTimeout:_session.disconnectTimeout];
}
[self.delegate bridgeHandDelegateShowDisconnectedScreen:self];
} else if (state == GKPeerStateConnected) {
if (_isServer) {
NSLog(@"Switching Session off");
_session.available = NO;
}
[self.delegate bridgeHandDelegateHideDisconnectedScreen:self];
}
if (_isServer) {
NSLog(@"session state: %d", _session.available);
}
}
ご覧のとおり、NSLog ステートメントを含むコードが散らかっています。シミュレーター上にあるホストをサスペンドしたときの出力は次のとおりです。
シミュレーター:
2013-03-22 18:28:55.359 Practice[56120:c07] Game: peer 587373189 changed state 3
2013-03-22 18:28:55.359 Practice[56120:c07] Switching session ON
2013-03-22 18:28:55.364 Practice[56120:c07] session state: 1
2013-03-22 18:28:56.563 Practice[56120:c07] Game: peer 587373189 changed state 4
2013-03-22 18:28:56.563 Practice[56120:c07] session state: 1
2013-03-22 18:28:56.564 Practice[56120:c07] Game: connection request from peer 587373189
2013-03-22 18:28:56.565 Practice[56120:c07] MatchmakingServer: Connection accepted from peer: 587373189
2013-03-22 18:28:56.579 Practice[56120:c07] Game: peer 587373189 changed state 2
2013-03-22 18:28:56.580 Practice[56120:c07] Switching Session off
2013-03-22 18:28:56.582 Practice[56120:c07] session state: 0
デバイス:
2013-03-22 22:24:04.922 BridgeBiddingPractice[3739:907] Game: peer 865951788 changed state 3
2013-03-22 22:24:04.924 BridgeBiddingPractice[3739:907] Switching session ON
2013-03-22 22:24:04.938 BridgeBiddingPractice[3739:907] session state: 0
2013-03-22 22:24:04.942 BridgeBiddingPractice[3739:907] Game: session failed Error Domain=com.apple.gamekit.GKSessionErrorDomain Code=-65540 "The operation couldn’t be completed. (com.apple.gamekit.GKSessionErrorDomain error -65540.)"
エラー 65540 に関する記述が見つかりません。