我在两个应用程序之间有一个 GKSession。一个是服务器,另一个是客户端。服务器使客户端应用程序使用 urlscheme 命令启动另一个应用程序。
我希望发生的是,当客户端应用程序关闭时,会话结束,另一个应用程序打开,我们开始一个新的会话。
实际发生的事情对我来说有点神秘。基本上,新应用程序打开并开始与服务器通信。大量数据包在两者之间来回发送......但在短时间内(3-5 秒)后,GKPeerStateDisconnected 情况发生在 session:peer:didChangeState: 与之前连接的应用程序中。这将停止应用程序之间的所有通信。
我最初为此使用了对等选择器,它工作得很好(除了你需要按下很多手动按钮)。现在我需要删除对等选择器并让这个过程自动发生。
-(void)session:(GKSession *)session
peer:(NSString *)peerID
didChangeState:(GKPeerConnectionState)state
{
BOOL peerChanged = NO;
NSLog(@"peer:%@ didChangeState: %d", peerID, state);
switch(state) {
case GKPeerStateAvailable:
[session connectToPeer:peerID withTimeout:1000];
peerChanged = YES;
break;
case GKPeerStateUnavailable:
peerChanged = YES;
break;
case GKPeerStateConnected:
[self.peerList addObject:peerID];
[self setupConnectionWithPeer:peerID toSession:session];
break;
case GKPeerStateDisconnected:
[self.peerList removeObject:peerID];
if(self.peerList.count == 0) self.isConnected = NO;
break;
}
NSLog(@"Number of peers: %d", self.peerList.count);
}