public override void MatchDidReceiveDataForRecipient(GKMatch match, NSData data, GKPlayer recipient, GKPlayer remotePlayer)
 {
     if (recipient != null && recipient.Equals(GKLocalPlayer.LocalPlayer))
     {
         MatchDidReceiveData(match, data, remotePlayer);
     }
 }
            public override void PlayerDidChangeConnectionState(GKMatch match, GKPlayer player, GKPlayerConnectionState state)
            {
                RuntimeHelper.RunOnMainThread(() =>
                {
                    var listener = mClient.mCurrentListener;

                    if (listener == null || match == null || player == null)
                    {
                        return;
                    }

                    if (player.Equals(GKLocalPlayer.LocalPlayer))
                    {
                        // In reality, this never runs because GameKit never reports
                        // connection state changes of local player.
                        if (state == GKPlayerConnectionState.Disconnected)
                        {
                            listener.OnLeftRoom();
                        }
                    }
                    else
                    {
                        if (state == GKPlayerConnectionState.Connected)
                        {
                            listener.OnPeersConnected(new string[] { player.PlayerID });
                            ReportRoomSetupProgress(listener, match, null, true);
                        }
                        else if (state == GKPlayerConnectionState.Disconnected)
                        {
                            if (match.ExpectedPlayerCount > 0)      // player leaves during room setup
                            {
                                listener.OnParticipantLeft(Participant.FromGKPlayer(player, state.ToParticipantStatus(), false));
                                ReportRoomSetupProgress(listener, match, null, true);
                            }
                            else        // player disconnected after match setup has completed
                            {
                                listener.OnPeersDisconnected(new string[] { player.PlayerID });
                            }
                        }
                    }
                });
            }