internal void _OnPlayerStateChanged(Player player, GKPlayerConnectionState state) { if (_playerStateChangedHandlers != null) { _playerStateChangedHandlers(this, new PlayerStateChangedEventArgs(player, (state == GKPlayerConnectionState.Connected))); } }
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; }); }
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 }); } } } }); }
internal void _OnPlayerStateChanged(Player player, GKPlayerConnectionState state) { if (_playerStateChangedHandlers != null) _playerStateChangedHandlers(this, new PlayerStateChangedEventArgs(player, (state == GKPlayerConnectionState.Connected))); }
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)); } }