GKSession, GKSessionDelegate
多数のiX(iPod、iPad、iPhoneなど)デバイス間のピアツーピアBluetooth接続を実装するために使用しています。現在利用可能な/接続されている範囲内のデバイスのリストを表示したい。
現在頼りにしている
- (void)session:(GKSession *)session peer:(NSString *)peerID didChangeState:(GKPeerConnectionState)state
これをする。残念ながら、このメソッドは、デバイスが範囲外になったときに確実に呼び出されるようには見えません。デバイスが範囲内にあるかどうかを判断する「より良い」方法はありますか?
いくつかのコード:
- (void)session:(GKSession *)session peer:(NSString *)peerID didChangeState:(GKPeerConnectionState)state {
NSString* connectionStateString=
(state==GKPeerStateAvailable)?@"available":
(state==GKPeerStateUnavailable)?@"unavailable":
(state==GKPeerStateConnected)?@"connected":
(state==GKPeerStateDisconnected)?@"disconnected":@"connecting";
// Add the peer to the Dictionary
NSArray* details=[NSArray arrayWithObjects:[session displayNameForPeer:peerID],connectionStateString,nil];
[connectionPeers setObject:details forKey:peerID];
if (state == GKPeerStateAvailable) {
NSLog(@"Adding peerID:%@",peerID);
[session connectToPeer:peerID withTimeout:60];//'connect' to everything, so data can be sent
}
else if (state == GKPeerStateUnavailable || state==GKPeerStateDisconnected) {
[connectionPeers removeObjectForKey:peerID];
}
[self listPlayers];
}