public IEnumerator SignInPlayer()

in Assets/Xbox Live/Scripts/SignInManager.cs [60:147]


        public IEnumerator SignInPlayer(int playerNumber)
        {
            yield return null;
            if (ValidatePlayerNumber(playerNumber, "Add User", XboxLiveOperationType.SignIn))
            {
                if (!CurrentPlayers.ContainsKey(playerNumber))
                {
                    var newPlayerInfo = new XboxLivePlayerInfo()
                    {
                        SignInCallbacks = new List<UnityAction<XboxLiveUser, XboxLiveAuthStatus, string>>(),
                        SignOutCallbacks = new List<UnityAction<XboxLiveUser, XboxLiveAuthStatus, string>>()
                    };
                    this.CurrentPlayers.Add(playerNumber, newPlayerInfo);
                }
                
#if ENABLE_WINMD_SUPPORT
            var playerInfo = this.CurrentPlayers[playerNumber];
            if (this.GetMaximumNumberOfPlayers() > 1)
            {
                var autoPicker = new Windows.System.UserPicker { AllowGuestAccounts = false };
                var userPicked = false;
                autoPicker.PickSingleUserAsync().AsTask().ContinueWith(
                        task =>
                        {
                            if (task.Status == TaskStatus.RanToCompletion)
                            {
                                if (task.Result != null)
                                {
                                    playerInfo.WindowsUser = task.Result;
                                    playerInfo.XboxLiveUser = new XboxLiveUser(playerInfo.WindowsUser);
                                    XboxLiveUser.SignOutCompleted += XboxLiveUserSignOutCompleted;
                                    this.PlayersPendingSignIn.Add(playerNumber);
                                    userPicked = true;
                                }
                                else {
                                    userPicked = false;
                                    NotifyAllCallbacks(playerNumber, null, XboxLiveAuthStatus.Canceled, "Sign In Failed: Player " + playerNumber + " failed. Status: Canceled by the User.");
                                }
                            }
                            else
                            {
                                if (task.Status == TaskStatus.Canceled)
                                {
                                    userPicked = false;
                                    NotifyAllCallbacks(playerNumber, null, XboxLiveAuthStatus.Canceled, "Sign In Failed: Player " + playerNumber + " failed. Status: Canceled by the User.");
                                }
                                else
                                {
                                    if (task.Status == TaskStatus.Faulted)
                                    {
                                        ExceptionManager.Instance.ThrowException(
                                            ExceptionSource.SignInManager,
                                            ExceptionType.SignInFailed,
                                            task.Exception);
                                        userPicked = false;
                                        NotifyAllCallbacks(playerNumber, null, XboxLiveAuthStatus.Failed, "Sign In Failed: Player " + playerNumber + " failed.");
                                    }
                                }
                            }
                        });
                    if (userPicked) {
                        this.StartCoroutine(this.SignInAsync(playerNumber, this.CurrentPlayers[playerNumber]));
                    }
            }
            else
            {
                var usersTask = Windows.System.User.FindAllAsync().AsTask();
                if (usersTask.Status == TaskStatus.RanToCompletion && usersTask.Result != null && usersTask.Result.Count > 0)
                {
                    var windowsUser = usersTask.Result[0];
                    this.CurrentPlayers[playerNumber].WindowsUser = windowsUser;
                    this.CurrentPlayers[playerNumber].XboxLiveUser = new XboxLiveUser(windowsUser);
                    this.StartCoroutine(this.SignInAsync(playerNumber, this.CurrentPlayers[playerNumber]));
                }
                else
                {
                    this.CurrentPlayers[playerNumber].XboxLiveUser = new XboxLiveUser();
                    XboxLiveUser.SignOutCompleted += XboxLiveUserSignOutCompleted;
                    this.StartCoroutine(this.SignInAsync(playerNumber, this.CurrentPlayers[playerNumber]));
                }
            }
#else
                this.CurrentPlayers[playerNumber].XboxLiveUser = new XboxLiveUser();
                XboxLiveUser.SignOutCompleted += XboxLiveUserSignOutCompleted;
                this.StartCoroutine(this.SignInAsync(playerNumber, this.CurrentPlayers[playerNumber]));
#endif
            }
        }