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(); }
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(); }