2011-03-16 3 views
0

일반적인 GKSessionModeServer/GKSessionModeClient 설정이 있습니다.클라이언트 GKSession이 denyConnectionFromPeer 이후에 연결되었다고 생각합니다.

서버가 클라이언트 연결 시도를 denyConnectionFromPeer:으로 거부하면 클라이언트의 session:connectionWithPeerFailed: 메서드가 호출되지만 서버의 peerID가 GKPeerStateConnected 인 상태 변경이 수신됩니다. 즉, 클라이언트는 서버가 작동하지 않는 동안 연결이 성공했다고 생각합니다. 각 성공적으로 연결 피어에 대한

이 상식과 원격 피어와의 연결이 성공하면

을 말한다 connectToPeer:withTimeout:에 대한 설명서와 상충 될 것으로 보인다 대리자 'session:peer:didChangeState: 메소드가 불려 에. 연결이 실패하거나 응용 프로그램이 연결 시도를 취소하면 세션에서 대리자의 session:connectionWithPeerFailed:withError: 메서드를 호출합니다.

나는이 상태 변경 콜백 이 연결 실패의 경우에 호출되지 것을 말하지 않는다 알고 있지만 클라이언트의 관점에서 최종 결과는 실패한 연결에 나타납니다이다 연결이 성공했다.

빨대에서 쥐고 나는 결과없이 connectionWithPeerFailed 콜백에서 cancelConnectToPeer을 호출 해 보았습니다.

클라이언트는 다음을 무시하여이 문제를 해결할 수 있지만 GKPeerStateConnected이지만 이는 서버가 다시 연결을 수락하기 시작할 때 다시 연결되는 것을 어렵게합니다.

그렇다면 클라이언트 세션에서 세션이 끝났음을 알 수없는 이유는 무엇입니까?

답변

1

저는 동일한 종류의 응용 프로그램을 직접 디자인했습니다 (GKSessionModeServer/GKSessionModeClient). 피어에 대한 연결을 거부하면 으로 설정된 GKPeerConnectionState 인수와 함께 session:peer:didChangeState: 대리자가 트리거됩니다. 코드에서 올바르게 처리해야합니다. 그 부분에 대해서는 전혀 문제가 없었습니다.