>>This is incorrect. All players get the call to didChangeState. Isn't that cool!
It would be cool if it was working that way, but it is not working that way :>(
I understand all players in the game should be receiving a "didChange state" disconnect message, however, I have proven that this is not occurring when Game Center initiates the disconnect itself. When a "didChange state" disconnect comes in, I have my code play a particular "sound file" so I can prove whether the disconnect came in via "didChange state" on all iPhone devices playing the game. When this issue occurs, some player devices (iPhones) are not playing the sound file, so this indicates some player devices are not getting the "didChange state" disconnect indication. The device which did not play the sound file are truly still connected to the player who seemingly disconnected from Game Center as well
No players in the game are actually disconnecting themselves so the disconnect is being generated from Game Center. MOST times, when Game Center initiates a disconnect for a player then only 1 (or occasionally 2) other players receive the disconnect message via "didChange state" only, thus leaving the game out of sync. I have seen Game Center initiate spurious disconnects in my 3 and 4-player games. My card game takes about 20-25 minutes to play and a Game Center initiated disconnect will occur in about 60% of the games played, thus very annoying.
Sometimes even the player Game Center indicated has disconnected might not receive the "didChange state" disconnect message themselves and that player will still remain connected to other players and can still send/receive data. It is very odd.
The player that Game Center disconnected actually remains connected to some of the other players in the game and can send data back and forth with these other players. The player who "received" the disconnect from Game Center can also interact with some of the remaining players as well, but is truly disconnected from the player the Game Center disconnect was related to (of course). This means Game Center is only reporting the disconnect related to the network connection which has gone down only, and not informing all players about this disconnection.
If all players were to receive the same disconnect from Game Center, as expected, then my game would handle the disconnect properly and allow the remaining players to finish their game. However, when only some of the players receive a disconnect then the game is compeltely out of sync and there is nothing I can do ... unless there is a way I can poll Game Center for a fresh overall match status of all players to determine whether any other players have been truly disconnected without some players knowing about it. I would then be able to initiate the proper "missing" disconnects myself and save my game play.