Ejemplo n.º 1
0
        public override void Run()
        {
            var connection = CoordinatorConnection.ConnectAndKeepAlive(Logger, ReceptionistHost, ReceptionistPort, CoordinatorWorkerId, CoordinatorWorkerType);

            // Read worker flags.
            string devAuthToken     = connection.GetWorkerFlag(DevAuthTokenWorkerFlag);
            string targetDeployment = connection.GetWorkerFlag(TargetDeploymentWorkerFlag);
            int    deploymentTotalNumSimulatedPlayers = int.Parse(GetWorkerFlagOrDefault(connection, DeploymentTotalNumSimulatedPlayersWorkerFlag, "100"));

            Logger.WriteLog($"Starting {NumSimulatedPlayersToStart} simulated players.");
            Thread.Sleep(InitialStartDelayMillis);

            var maxDelayMillis = deploymentTotalNumSimulatedPlayers * AverageDelayMillisBetweenConnections;

            // Distribute player connections uniformly by generating a random time to connect between now and maxDelayMillis,
            // such that, on average, a player connects every AverageDelayMillisBetweenConnections milliseconds deployment-wide.
            // There can be multiple coordinator workers per deployment, to ensure that the combined connections created by all
            // coordinators are spread out uniformly, generate a start delay for each player independently of other players' start delays.
            var startDelaysMillis = new int[NumSimulatedPlayersToStart];

            for (int i = 0; i < NumSimulatedPlayersToStart; i++)
            {
                startDelaysMillis[i] = Random.Next(maxDelayMillis);
            }

            Array.Sort(startDelaysMillis);

            DateTime curTime = DateTime.Now;

            for (int i = 0; i < NumSimulatedPlayersToStart; i++)
            {
                ClientInfo clientInfo = new ClientInfo()
                {
                    ClientName       = $"SimulatedPlayer{Guid.NewGuid()}",
                    StartTime        = curTime.AddMilliseconds(startDelaysMillis[i]),
                    DevAuthToken     = devAuthToken,
                    TargetDeployment = targetDeployment
                };

                LifetimeComponent.AddSimulatedPlayer(clientInfo);
            }

            LifetimeComponent.Start();
        }
Ejemplo n.º 2
0
        public override void Run()
        {
            Thread.Sleep(InitialStartDelayMillis);

            DateTime curTime = DateTime.Now;

            for (int i = 0; i < NumSimulatedPlayersToStart; i++)
            {
                // Push into wait list.
                ClientInfo clientInfo = new ClientInfo()
                {
                    ClientName = $"SimulatedPlayer{Guid.NewGuid()}",
                    StartTime  = curTime.AddMilliseconds(StartIntervalMillis * i)
                };

                LifetimeComponent.AddSimulatedPlayer(clientInfo);
            }

            LifetimeComponent.Start();
        }