private string CreatePlayerIdentityTokenForPlayer(string playerId)
 {
     return(_authServiceClient.CreatePlayerIdentityToken(new CreatePlayerIdentityTokenRequest
     {
         PlayerIdentifier = playerId,
         Provider = "test_provider",
         ProjectName = _projectName
     }).PlayerIdentityToken);
 }
Пример #2
0
        private static string CreatePlayerIdentityTokenForPlayer(string playerId)
        {
            var request = new CreatePlayerIdentityTokenRequest
            {
                PlayerIdentifier = playerId,
                ProjectName      = _projectName,
                Provider         = TestProvider
            };

            return(_authServiceClient.CreatePlayerIdentityToken(request).PlayerIdentityToken);
        }
Пример #3
0
        protected override void Run()
        {
            Console.WriteLine("Creating a PlayerIdentityToken");
            var playerIdentityTokenResponse = _playerAuthServiceClient.CreatePlayerIdentityToken(
                new CreatePlayerIdentityTokenRequest
            {
                Provider         = "provider",
                PlayerIdentifier = "player_identifier",
                ProjectName      = ProjectName
            });

            Console.WriteLine("Choosing a deployment");
            var suitableDeployment = _deploymentServiceClient.ListDeployments(new ListDeploymentsRequest
            {
                ProjectName    = ProjectName,
                DeploymentName = DeploymentName
            }).First(d => d.Tag.Contains(ScenarioDeploymentTag));

            Console.WriteLine("Creating a LoginToken for the selected deployment");
            var createLoginTokenResponse = _playerAuthServiceClient.CreateLoginToken(
                new CreateLoginTokenRequest
            {
                PlayerIdentityToken = playerIdentityTokenResponse.PlayerIdentityToken,
                DeploymentId        = suitableDeployment.Id,
                LifetimeDuration    = Duration.FromTimeSpan(new TimeSpan(0, 0, 30, 0)),
                WorkerType          = ScenarioWorkerType
            });

            Console.WriteLine("Connecting to the deployment using the LoginToken and PlayerIdentityToken");
            var locatorParameters = new LocatorParameters
            {
                PlayerIdentity = new PlayerIdentityCredentials
                {
                    PlayerIdentityToken = playerIdentityTokenResponse.PlayerIdentityToken,
                    LoginToken          = createLoginTokenResponse.LoginToken
                }
            };
            var locator = new Locator(LocatorServerAddress, LocatorServerPort, locatorParameters);

            using (var connectionFuture = locator.ConnectAsync(new ConnectionParameters
            {
                WorkerType = ScenarioWorkerType,
                Network = { ConnectionType = NetworkConnectionType.Tcp, UseExternalIp = true }
            }))
            {
                var connFuture = connectionFuture.Get(Convert.ToUInt32(Defaults.ConnectionTimeoutMillis));
                if (!connFuture.HasValue || !connFuture.Value.IsConnected)
                {
                    throw new Exception("No connection or connection not established");
                }
                Console.WriteLine($"Assigned worker ID: {connFuture.Value.GetWorkerId()}");
            }
        }
Пример #4
0
        public override Task <ExchangeSteamTokenResponse> ExchangeSteamToken(ExchangeSteamTokenRequest request,
                                                                             ServerCallContext context)
        {
            try
            {
                //validate SteamEncryptedAppTicket with SteamEncryptedAppTicketWrapper
                Console.WriteLine("make sure sdkencryptedappticket64.dll and steam_api64.dll are in same folder as SteamAuth.dll");


                string steamEncryptedAppTicket = request.SteamToken;


                Int64 result = SteamEncryptedAppTicketWrapper.decrypt_ticket();
                Console.WriteLine(result.ToString());
            }
            catch (Exception e)
            {
                Log.Error(e, "Failed to authenticate SteamEncryptedAppTicket ticket");
                throw new RpcException(new Status(StatusCode.InvalidArgument, "Failed to authenticate SteamEncryptedAppTicket ticket"));
            }

            /*
             *  some player table mapping
             *  SteamID | UUID
             *  var uniquePlayerId = new GetUniquePlayerIdentifierRequest....talk to redis
             */
            var uniquePlayerId = RandomString(15);

            try
            {
                //why use async?
                var playerIdentityToken = _authServiceClient.CreatePlayerIdentityToken(
                    new CreatePlayerIdentityTokenRequest
                {
                    PlayerIdentifier = uniquePlayerId,
                    Provider         = "steam",
                    ProjectName      = _project
                }
                    );

                return(Task.FromResult(new ExchangeSteamTokenResponse
                {
                    PlayerIdentityToken = playerIdentityToken.PlayerIdentityToken
                }));
            }
            catch (Exception e)
            {
                Log.Error(e, $"Failed to create player identity token for {uniquePlayerId}");
                throw new RpcException(new Status(StatusCode.Internal,
                                                  $"Failed to create player identity token for {uniquePlayerId}"));
            }
        }
Пример #5
0
        // this is the client implementation of ExchangePlayFabToken -- the server in this example is owned by Spatial and they have an implementation i cant access
        public override Task <ExchangePlayFabTokenResponse> ExchangePlayFabToken(ExchangePlayFabTokenRequest request,
                                                                                 ServerCallContext context)
        {
            UserAccountInfo userInfo;

            try
            {
                var authenticateTask = PlayFabServerAPI.AuthenticateSessionTicketAsync(
                    new AuthenticateSessionTicketRequest
                {
                    SessionTicket = request.PlayfabToken,
                });
                authenticateTask.Wait();
                userInfo = authenticateTask.GetAwaiter().GetResult().Result.UserInfo;
            }
            catch (Exception e)
            {
                Log.Error(e, "Failed to authenticate PlayFab ticket");
                throw new RpcException(new Status(StatusCode.InvalidArgument, "Failed to authenticate PlayFab ticket"));
            }

            try
            {
                var playerIdentityToken = _authServiceClient.CreatePlayerIdentityToken(
                    new CreatePlayerIdentityTokenRequest
                {
                    PlayerIdentifier = userInfo.PlayFabId,
                    Provider         = "playfab",
                    ProjectName      = _project
                }
                    );

                _analytics.Send("player_token_exchanged", new Dictionary <string, string>
                {
                    { "provider", "PlayFab" },
                    { "spatialProjectId", _project }
                }, userInfo.PlayFabId);

                return(Task.FromResult(new ExchangePlayFabTokenResponse
                {
                    PlayerIdentityToken = playerIdentityToken.PlayerIdentityToken
                }));
            }
            catch (Exception e)
            {
                Log.Error(e, $"Failed to create player identity token for {userInfo.PlayFabId}");
                throw new RpcException(new Status(StatusCode.Internal,
                                                  $"Failed to create player identity token for {userInfo.PlayFabId}"));
            }
        }
Пример #6
0
 public async Task <object> CreatePlayerIdentityToken(dynamic data)
 {
     return(await Task.Run(() => {
         PlatformRefreshTokenCredential CredentialWithProvidedToken = new PlatformRefreshTokenCredential(data._RefreshToken);
         PlayerAuthServiceClient _playerAuthServiceClient = PlayerAuthServiceClient.Create(credentials: CredentialWithProvidedToken);
         var playerIdentityTokenResponse = _playerAuthServiceClient.CreatePlayerIdentityToken(
             new CreatePlayerIdentityTokenRequest
         {
             Provider = data._Provider,
             PlayerIdentifier = data._PlayerIdentifier,
             ProjectName = data._ProjectName
         });
         return playerIdentityTokenResponse.PlayerIdentityToken;
     }));
 }
Пример #7
0
        protected override void Run()
        {
            Console.WriteLine("Creating a PlayerIdentityToken");
            var playerIdentityTokenResponse = _playerAuthServiceClient.CreatePlayerIdentityToken(
                new CreatePlayerIdentityTokenRequest
            {
                Provider         = "provider",
                PlayerIdentifier = "player_identifier",
                ProjectName      = ProjectName
            });

            Console.WriteLine("Verifying PlayerIdentityToken");
            var decodePlayerIdentityTokenResponse = _playerAuthServiceClient.DecodePlayerIdentityToken(
                new DecodePlayerIdentityTokenRequest
            {
                PlayerIdentityToken = playerIdentityTokenResponse.PlayerIdentityToken
            });
            var playerIdentityToken = decodePlayerIdentityTokenResponse.PlayerIdentityToken;

            if (playerIdentityToken.Provider != "provider")
            {
                throw new Exception("Provider not recognised.");
            }
            if (playerIdentityToken.ProjectName != ProjectName)
            {
                throw new Exception("Project not recognised.");
            }
            if (DateTime.Now.CompareTo(playerIdentityToken.ExpiryTime.ToDateTime()) > 0)
            {
                throw new Exception("PlayerIdentityToken expired.");
            }

            Console.WriteLine("Choosing a deployment");
            var listDeploymentsRequest = new ListDeploymentsRequest
            {
                ProjectName = ProjectName,
                Filters     = { new Filter
                                {
                                    TagsPropertyFilter = new TagsPropertyFilter
                                    {
                                        Tag      = "player_auth_tag",
                                        Operator = TagsPropertyFilter.Types.Operator.Equal,
                                    },
                                } }
            };
            var suitableDeployment = _deploymentServiceClient.ListDeployments(listDeploymentsRequest).First();

            Console.WriteLine("Creating a LoginToken for the selected deployment");
            var createLoginTokenResponse = _playerAuthServiceClient.CreateLoginToken(
                new CreateLoginTokenRequest
            {
                PlayerIdentityToken = playerIdentityTokenResponse.PlayerIdentityToken,
                DeploymentId        = suitableDeployment.Id.ToString(),
                LifetimeDuration    = Duration.FromTimeSpan(new TimeSpan(0, 0, 30, 0)),
                WorkerType          = ScenarioWorkerType
            });

            Console.WriteLine("Connecting to the deployment using the LoginToken and PlayerIdentityToken");
            var locatorParameters = new LocatorParameters
            {
                PlayerIdentity = new PlayerIdentityCredentials
                {
                    PlayerIdentityToken = playerIdentityTokenResponse.PlayerIdentityToken,
                    LoginToken          = createLoginTokenResponse.LoginToken
                }
            };
            var locator = new Locator(LocatorServerAddress, LocatorServerPort, locatorParameters);

            using (var connectionFuture = locator.ConnectAsync(new ConnectionParameters
            {
                WorkerType = ScenarioWorkerType,
                Network = { ConnectionType = NetworkConnectionType.Tcp, UseExternalIp = true }
            }))
            {
                var connFuture = connectionFuture.Get(Convert.ToUInt32(Defaults.ConnectionTimeoutMillis));
                if (!connFuture.HasValue || !connFuture.Value.IsConnected)
                {
                    throw new Exception("No connection or connection not established");
                }
                Console.WriteLine($"Assigned worker ID: {connFuture.Value.GetWorkerId()}");
            }
        }
Пример #8
0
        /// <summary>
        ///     This contains the implementation of the "Capacity limiting" scenario.
        ///     1. Gets the currently running cloud deployment that has a capacity limit.
        ///     2. Tests that connecting more clients than the capacity limit fails.
        ///     3. Updates the deployment to increase the capacity limit.
        ///     4. Tests that additional clients are now able to connect to the deployment.
        /// </summary>
        protected override void Run()
        {
            Console.WriteLine("Finding current running deployment");
            _deployment = _deploymentServiceClient
                          .ListDeployments(new ListDeploymentsRequest
            {
                ProjectName    = ProjectName,
                DeploymentName = DeploymentName
            })
                          .First(d => d.Status == Deployment.Types.Status.Running);
            Console.WriteLine($"Found deployment {_deployment.Id}");

            Console.WriteLine("Setting capacity limit to 2");
            _deployment.WorkerConnectionCapacities.Clear();
            _deployment.WorkerConnectionCapacities.Add(new WorkerCapacity
            {
                WorkerType  = ScenarioWorkerType,
                MaxCapacity = 2
            });
            _deploymentServiceClient.UpdateDeployment(new UpdateDeploymentRequest {
                Deployment = _deployment
            });

            Console.WriteLine("Creating a PlayerIdentityToken");
            var playerIdentityTokenResponse = _playerAuthServiceClient.CreatePlayerIdentityToken(
                new CreatePlayerIdentityTokenRequest
            {
                Provider         = "provider",
                PlayerIdentifier = "player_identifier",
                ProjectName      = ProjectName
            });

            Console.WriteLine(JsonConvert.SerializeObject(playerIdentityTokenResponse));

            Console.WriteLine("Creating a LoginToken for the selected deployment");
            var createLoginTokenResponse = _playerAuthServiceClient.CreateLoginToken(
                new CreateLoginTokenRequest
            {
                PlayerIdentityToken = playerIdentityTokenResponse.PlayerIdentityToken,
                DeploymentId        = _deployment.Id,
                LifetimeDuration    = Duration.FromTimeSpan(new TimeSpan(0, 0, 30, 0)),
                WorkerType          = ScenarioWorkerType
            });

            Console.WriteLine(JsonConvert.SerializeObject(createLoginTokenResponse));

            Console.WriteLine("Connecting 3 workers to the deployment. Expecting only 2 to succeed");
            var locatorParameters = new LocatorParameters
            {
                PlayerIdentity = new PlayerIdentityCredentials
                {
                    PlayerIdentityToken = playerIdentityTokenResponse.PlayerIdentityToken,
                    LoginToken          = createLoginTokenResponse.LoginToken
                }
            };
            var locator = new Locator(LocatorServerAddress, LocatorServerPort, locatorParameters);

            for (var i = 0; i < 3; i++)
            {
                var connectionSucceeded = TryConnectWorker(locator);
                if (!connectionSucceeded && i != 2)
                {
                    throw new Exception("Expected worker to connect successfully");
                }
                if (connectionSucceeded && i == 2)
                {
                    throw new Exception("Expected worker to fail to connect");
                }
            }

            Console.WriteLine("Increasing capacity limit to 3");
            _deployment.WorkerConnectionCapacities.Clear();
            _deployment.WorkerConnectionCapacities.Add(new WorkerCapacity
            {
                WorkerType  = ScenarioWorkerType,
                MaxCapacity = 3
            });
            _deploymentServiceClient.UpdateDeployment(new UpdateDeploymentRequest {
                Deployment = _deployment
            });

            Console.WriteLine("Connecting another worker");
            if (!TryConnectWorker(locator))
            {
                throw new Exception("Expected worker to be able to connect after capacity increase");
            }
        }