示例#1
0
 internal void _OnPlayerStateChanged(Player player, GKPlayerConnectionState state)
 {
     if (_playerStateChangedHandlers != null)
     {
         _playerStateChangedHandlers(this, new PlayerStateChangedEventArgs(player, (state == GKPlayerConnectionState.Connected)));
     }
 }
示例#2
0
        public override void PlayerDidChangeState(GKMatch match, string playerID, GKPlayerConnectionState state)
        {
            Player.LoadPlayersByIDs(new string[] { playerID }, delegate(Player[] players) {
                var rtMatch = NSObjectWrapper.GetWrapper(match.Uuid) as RealTimeMatch;
                if ((rtMatch != null) && (rtMatch.gkMatch != null) && (players.Length > 0))
                {
                    rtMatch._OnPlayerStateChanged(players[0], state);
                }

                match = null;
            });
        }
示例#3
0
        public static ParticipantStatus ToParticipantStatus(this GKPlayerConnectionState connectionState)
        {
            switch (connectionState)
            {
            case GKPlayerConnectionState.Connected:
                return(ParticipantStatus.Joined);

            case GKPlayerConnectionState.Disconnected:
                return(ParticipantStatus.Unknown);

            case GKPlayerConnectionState.Unknown:
            default:
                return(ParticipantStatus.Unknown);
            }
        }
            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 });
                            }
                        }
                    }
                });
            }
示例#5
0
 internal void _OnPlayerStateChanged(Player player, GKPlayerConnectionState state)
 {
     if (_playerStateChangedHandlers != null)
         _playerStateChangedHandlers(this, new PlayerStateChangedEventArgs(player, (state == GKPlayerConnectionState.Connected)));
 }
示例#6
0
        private static void InternalPlayerDidChangeConnectionStateCallback(IntPtr delegatePtr, IntPtr match, IntPtr player, GKPlayerConnectionState state)
        {
            var forwarder = FromPointer(delegatePtr);

            if (forwarder != null && forwarder.Listener != null)
            {
                var gkMatch = InteropObjectFactory <GKMatch> .FromPointer(match, ptr => new GKMatch(ptr));

                var gkPlayer = InteropObjectFactory <GKPlayer> .FromPointer(player, ptr => new GKPlayer(ptr));

                forwarder.InvokeOnListener(l => l.PlayerDidChangeConnectionState(gkMatch, gkPlayer, state));
            }
        }