예제 #1
0
        /// <summary>
        ///     Retrieves the login tokens for all active deployments that the player
        ///     can connect to via the anonymous authentication flow.
        /// </summary>
        /// <param name="workerType">The type of the worker that wants to connect.</param>
        /// <param name="playerIdentityToken">The player identity token of the player that wants to connect.</param>
        /// <returns>A list of all available login tokens and their deployments.</returns>
        protected virtual List <LoginTokenDetails> GetDevelopmentLoginTokens(string workerType, string playerIdentityToken)
        {
            var result = DevelopmentAuthentication.CreateDevelopmentLoginTokensAsync(
                RuntimeConfigDefaults.LocatorHost,
                RuntimeConfigDefaults.AnonymousAuthenticationPort,
                new LoginTokensRequest
            {
                WorkerType            = workerType,
                PlayerIdentityToken   = playerIdentityToken,
                UseInsecureConnection = false,
                DurationSeconds       = 120,
            }
                ).Get();

            if (!result.HasValue)
            {
                throw new AuthenticationFailedException("Did not receive any login tokens back.");
            }

            if (result.Value.Status != ConnectionStatusCode.Success)
            {
                throw new AuthenticationFailedException("Failed to retrieve any login tokens.\n" +
                                                        $"error code: {result.Value.Status}\nerror message: {result.Value.Error}");
            }

            return(result.Value.LoginTokens);
        }
예제 #2
0
        /// <summary>
        ///     Retrieves a development player identity token using development authentication.
        /// </summary>
        /// <returns>The player identity token string.</returns>
        /// <exception cref="AuthenticationFailedException">Failed to get a development player identity token.</exception>
        protected virtual string GetDevelopmentPlayerIdentityToken()
        {
            var result = DevelopmentAuthentication.CreateDevelopmentPlayerIdentityTokenAsync(
                LocatorHost,
                LocatorPort,
                new PlayerIdentityTokenRequest
                {
                    DevelopmentAuthenticationToken = DevAuthToken,
                    PlayerId = GetPlayerId(),
                    DisplayName = GetDisplayName(),
                    UseInsecureConnection = UseInsecureConnection,
                }
            ).Get();

            if (!result.HasValue)
            {
                throw new AuthenticationFailedException("Did not receive a player identity token.");
            }

            if (result.Value.Status.Code != ConnectionStatusCode.Success)
            {
                throw new AuthenticationFailedException("Failed to retrieve a player identity token.\n" +
                    $"error code: {result.Value.Status.Code}\nerror message: {result.Value.Status.Detail}");
            }

            return result.Value.PlayerIdentityToken;
        }
예제 #3
0
        /// <summary>
        ///     Retrieves the player identity token needed to generate a login token when using
        ///     the anonymous authentication flow.
        /// </summary>
        /// <param name="authToken">The authentication token that you generated.</param>
        /// <param name="playerId">The id of the player that wants to connect.</param>
        /// <param name="displayName">The display name of the player that wants to connect.</param>
        /// <returns>The player identity token.</returns>
        protected virtual string GetDevelopmentPlayerIdentityToken(string authToken, string playerId, string displayName)
        {
            var result = DevelopmentAuthentication.CreateDevelopmentPlayerIdentityTokenAsync(
                RuntimeConfigDefaults.LocatorHost,
                RuntimeConfigDefaults.AnonymousAuthenticationPort,
                new PlayerIdentityTokenRequest
            {
                DevelopmentAuthenticationTokenId = authToken,
                PlayerId    = playerId,
                DisplayName = displayName,
            }
                ).Get();

            if (!result.HasValue)
            {
                throw new AuthenticationFailedException("Did not receive a player identity token.");
            }

            if (result.Value.Status != ConnectionStatusCode.Success)
            {
                throw new AuthenticationFailedException("Failed to retrieve a player identity token.\n" +
                                                        $"error code: {result.Value.Status}\nerror message: {result.Value.Error}");
            }

            return(result.Value.PlayerIdentityToken);
        }
예제 #4
0
        private string GetPlayerIdentityToken(string developmentAuthToken, int retries = 0)
        {
            var playerIdentityTokenResponse = DevelopmentAuthentication.CreateDevelopmentPlayerIdentityTokenAsync(
                LocatorHost,
                LocatorPort,
                new PlayerIdentityTokenRequest
            {
                DevelopmentAuthenticationTokenId = developmentAuthToken,
                DisplayName           = workerType,
                PlayerId              = workerType,
                UseInsecureConnection = false,
            }).Get();

            if (playerIdentityTokenResponse.Status == ConnectionStatusCode.Success)
            {
                return(playerIdentityTokenResponse.PlayerIdentityToken);
            }

            if (retries < Utils.MaxRetries &&
                (playerIdentityTokenResponse.Status == ConnectionStatusCode.Timeout || playerIdentityTokenResponse.Status == ConnectionStatusCode.NetworkError))
            {
                return(GetPlayerIdentityToken(developmentAuthToken, retries + 1));
            }

            throw new System.Exception($"Failed to retrieve player identity token: {playerIdentityTokenResponse.Status}\n{playerIdentityTokenResponse.Error}");
        }
예제 #5
0
        private static string GetDevelopmentPlayerIdentityToken(string host, ushort port, bool useInsecureConnection, string authToken, string playerId, string displayName)
        {
            using var pit = DevelopmentAuthentication.CreateDevelopmentPlayerIdentityTokenAsync(
                      host, port,
                      new PlayerIdentityTokenRequest
            {
                DevelopmentAuthenticationToken = authToken,
                PlayerId              = playerId,
                DisplayName           = displayName,
                UseInsecureConnection = useInsecureConnection
            });
            var value = pit.Get();

            if (!value.HasValue)
            {
                throw new AuthenticationException("Error received while retrieving a Player Identity Token: null result");
            }

            if (value.Value.Status.Code != ConnectionStatusCode.Success)
            {
                throw new AuthenticationException($"Error received while retrieving a Player Identity Token: {value.Value.Status.Detail}");
            }

            return(value.Value.PlayerIdentityToken);
        }
예제 #6
0
 public override void StartState()
 {
     pitResponse = DevelopmentAuthentication.CreateDevelopmentPlayerIdentityTokenAsync(
         RuntimeConfigDefaults.LocatorHost,
         RuntimeConfigDefaults.AnonymousAuthenticationPort,
         new PlayerIdentityTokenRequest
     {
         DevelopmentAuthenticationToken = Blackboard.DevAuthToken,
         PlayerId    = Blackboard.PlayerName,
         DisplayName = string.Empty,
     }
         );
 }
 public override void StartState()
 {
     loginTokensResponse = DevelopmentAuthentication.CreateDevelopmentLoginTokensAsync(
         RuntimeConfigDefaults.LocatorHost,
         RuntimeConfigDefaults.AnonymousAuthenticationPort,
         new LoginTokensRequest
     {
         WorkerType            = WorkerUtils.UnityClient,
         PlayerIdentityToken   = Blackboard.PlayerIdentityToken,
         UseInsecureConnection = false,
         DurationSeconds       = 120,
     }
         );
 }
예제 #8
0
        public static string GetDevelopmentPlayerIdentityToken(string devAuthToken, string clientName)
        {
            var pitResponse = DevelopmentAuthentication.CreateDevelopmentPlayerIdentityTokenAsync("locator.improbable.io", 444,
                                                                                                  new PlayerIdentityTokenRequest
            {
                DevelopmentAuthenticationToken = devAuthToken,
                PlayerId    = clientName,
                DisplayName = clientName
            }).Get();

            if (pitResponse.Status.Code != ConnectionStatusCode.Success)
            {
                throw new Exception($"Failed to retrieve player identity token.\n" +
                                    $"error code: {pitResponse.Status.Code}\n" +
                                    $"error message: {pitResponse.Status.Detail}");
            }

            return(pitResponse.PlayerIdentityToken);
        }
예제 #9
0
        public static List <LoginTokenDetails> GetDevelopmentLoginTokens(string workerType, string pit)
        {
            var loginTokensResponse = DevelopmentAuthentication.CreateDevelopmentLoginTokensAsync(LOCATOR_HOST_NAME, LOCATOR_PORT,
                                                                                                  new LoginTokensRequest
            {
                PlayerIdentityToken   = pit,
                WorkerType            = workerType,
                UseInsecureConnection = false,
                DurationSeconds       = 300
            }).Get();

            if (loginTokensResponse.Status.Code != ConnectionStatusCode.Success)
            {
                throw new Exception($"Failed to retrieve any login tokens.\n" +
                                    $"error code: {loginTokensResponse.Status.Code}\n" +
                                    $"error message: {loginTokensResponse.Status.Detail}");
            }

            return(loginTokensResponse.LoginTokens);
        }
예제 #10
0
        private List <LoginTokenDetails> GetLoginTokenDetails(string playerIdentityToken, int retries = 0)
        {
            var loginTokenDetailsResponse = DevelopmentAuthentication.CreateDevelopmentLoginTokensAsync(
                LocatorHost,
                LocatorPort,
                new LoginTokensRequest
            {
                PlayerIdentityToken   = playerIdentityToken,
                UseInsecureConnection = false,
                WorkerType            = workerType,
            }).Get();

            if (loginTokenDetailsResponse.Status == ConnectionStatusCode.Success)
            {
                return(loginTokenDetailsResponse.LoginTokens);
            }
            else if (retries < Utils.MaxRetries &&
                     (loginTokenDetailsResponse.Status == ConnectionStatusCode.Timeout || loginTokenDetailsResponse.Status == ConnectionStatusCode.NetworkError))
            {
                return(GetLoginTokenDetails(playerIdentityToken, retries + 1));
            }

            throw new System.Exception($"Failed to retrieve player identity token: {loginTokenDetailsResponse.Status}\n{loginTokenDetailsResponse.Error}");
        }
예제 #11
0
        private static IEnumerable <LoginTokenDetails> GetDevelopmentLoginTokens(string host, ushort port, bool useInsecureConnection, string workerType, string pit)
        {
            using var tokens = DevelopmentAuthentication.CreateDevelopmentLoginTokensAsync(host, port,
                                                                                           new LoginTokensRequest
            {
                PlayerIdentityToken   = pit,
                WorkerType            = workerType,
                UseInsecureConnection = useInsecureConnection
            });

            var value = tokens.Get();

            if (!value.HasValue)
            {
                throw new AuthenticationException("Error received while retrieving Login Tokens: null result");
            }

            if (value.Value.Status.Code != ConnectionStatusCode.Success)
            {
                throw new AuthenticationException($"Error received while retrieving Login Tokens: {value.Value.Status.Detail}");
            }

            return(value.Value.LoginTokens);
        }