private void LoopAndSendRandom() { var j = ConsoleEx.ReadLine("Number of messages to send (0 for infinite or until ESC is pressed)", 0); for (var i = 0; i < j || j == 0; i++) { if (Console.KeyAvailable) { var key = Console.ReadKey(true); if (key.Key == ConsoleKey.Escape) { break; } } var typeToSend = GetMessageTypes().TakeRandom(); var gameEvent = (ITypeVersionMessage)Activator.CreateInstance(typeToSend); var props = gameEvent.GetType().GetProperties(); foreach (var prop in props) { var propName = prop.Name; if (propName != "ClientUtcTime" && Program.PropertyCache.ContainsKey(propName)) { prop.SetValue(gameEvent, Program.PropertyCache[propName]); } } _client.SendMessageAsync(gameEvent).Wait(); } _client.FlushAsync().Wait(); }
private void SampleFileSelected(string file) { var fileContent = File.ReadAllText(file); var templateObj = JObject.Parse(fileContent); var obj = new JObject(); foreach (var property in templateObj) { var propertyType = property.Value.Type.ToString(); switch (propertyType.ToLower()) { case "string": var s = ConsoleEx.ReadLine(property.Key, (string)property.Value); obj.Add(property.Key, s); break; case "integer": var i = ConsoleEx.ReadLine(property.Key, (int)property.Value); obj.Add(property.Key, i); break; default: break; } } _client.SendMessageAsync(obj.ToString()).Wait(); _client.FlushAsync().Wait(); }
private void SimulateWalkers() { var n = DateTime.UtcNow; var to = new DateTime(n.Year, n.Month, n.Day, 0, 0, 0, DateTimeKind.Utc); var from = to - TimeSpan.FromDays(1); var fromDate = ConsoleEx.ReadLine("From (UTC)", from); var toDate = ConsoleEx.ReadLine("To (UTC)", to); var timeZoneDiff = ConsoleEx.ReadLine("Time Zone Diff (h)", 1); var warmupTime = ConsoleEx.ReadLine("Warmup Time (min)", 15); var gamerTagFile1 = ConsoleEx.ReadLine("GamerTags File 1", "DataFiles/GamerTags1.txt", s => File.Exists(s)); var gamerTagFile2 = ConsoleEx.ReadLine("GamerTags File 2", "DataFiles/GamerTags2.txt", s => File.Exists(s)); var gamerTagFile3 = ConsoleEx.ReadLine("GamerTags File 3", "DataFiles/GamerTags3.txt", s => File.Exists(s)); var playerDistributionFile = ConsoleEx.ReadLine("Player Distribution File", "DataFiles/PlayerDistribution.tsv", s => File.Exists(s)); var routesFolder = ConsoleEx.ReadLine("GeoJson Routes Folder", DefaultRoutesFolder, s => Directory.Exists(s)); var step = ConsoleEx.ReadLine("Increase Clock With (s)", 12); var gamerTagProvider = new GamerTagProvider(gamerTagFile1, gamerTagFile2, gamerTagFile3); var gameSessionProvider = new GameSessionProvider(); var geoRouteProvider = new GeoRouteProvider(routesFolder); var playerDistribution = new PlayerDistributionProvider(playerDistributionFile); var now = fromDate.AddMinutes(-warmupTime); var bots = new List <NetherBot>(); var botsNeeded = 0d; var lastTick = now.AddSeconds(-1); while (now < toDate) { bool warmup = now <= fromDate; if (now.Second == 0) { Console.WriteLine(); Console.WriteLine(now.ToString()); Console.WriteLine($"Number of players: {bots.Count}"); } Console.Write("."); var delta = now - lastTick; botsNeeded += playerDistribution.GetDistribution(now) / 60; // * delta.TotalMinutes; var botsToSpawnNow = (int)botsNeeded; // Add any new bots needed for (int i = 0; i < botsToSpawnNow; i++) { var bot = new GeoBot(_client, gamerTagProvider, gameSessionProvider, geoRouteProvider); bots.Add(bot); } // Deduct the number of bots that was just spawned from the needed count of bots botsNeeded -= botsToSpawnNow; // Update each bot foreach (var bot in bots) { bot.TickAsync(now, warmup).Wait(); } // Remove bots that are done bots.RemoveAll(b => b.SessionEnded); now += TimeSpan.FromSeconds(step); } _client.FlushAsync().Wait(); }