private void btnStartBenchmark_Click(object sender, EventArgs e) { if (runningBenchmark) { runningBenchmark = false; tbenchmarkWaiter.Abort(); foreach (BenchmarkClient c in benchmarkClients) { c.Dispose(); } benchmarkClients.Clear(); btnStartBenchmark.Text = "Start"; } else { btnStartBenchmark.Text = "Stop"; benchmarkNumClients = (int)numBenchmarkClients.Value; benchmarkRate = (int)numBenchmarkRate.Value; benchmarkNumMessages = (int)numBenchmarkMessages.Value; messages = new Dictionary<string, Dictionary<int, int>>(); benchmarkOutboundPerformance.Clear(); benchmarkInboundPerformance.Clear(); connectedBenchmarkClients.Clear(); finishedBenchmarkClients.Clear(); for (int i = 0; i < numBenchmarkClients.Value; i++) { BenchmarkClient cli = new BenchmarkClient(this, characterName, benchmarkNumMessages, benchmarkRate, (int)numBenchmarkRounds.Value, i < numBenchmarkPublishers.Value); messages[cli.Name] = new Dictionary<int, int>(); benchmarkClients.Add(cli); if (cli.Publish) benchmarkPublishers++; cli.ClientConnected += (ThalamusClient.ClientConnectedHandler)(() => { ClientConnected(cli); }); cli.FinishedBenchmark += (BenchmarkClient.FinishedBenchmarkHandler)(() => { lock (finishedBenchmarkClients) { finishedBenchmarkClients.Add(cli); Thalamus.Environment.Instance.Debug(finishedBenchmarkClients.Count + "/" + benchmarkNumClients + " clients finished."); cli.PrintBenchmarkStatistics(); } }); } expectedMessagesPerPublishingClient = ((benchmarkPublishers - 1) * benchmarkNumMessages); expectedMessagesPerNonPublishingClient = (benchmarkPublishers * benchmarkNumMessages); foreach (BenchmarkClient c in benchmarkClients) { if (c.Publish) { c.ExpectedMessageCount = expectedMessagesPerPublishingClient; } else { c.ExpectedMessageCount = expectedMessagesPerNonPublishingClient; } c.Start(); } Thalamus.Environment.Instance.Debug("Launched all clients"); tbenchmarkWaiter = new Thread(new ThreadStart(BenchmarkWaiterThread)); tbenchmarkWaiter.Start(); } }
private void ClientConnected(BenchmarkClient cli) { lock (connectedBenchmarkClients) { connectedBenchmarkClients.Add(cli); Thalamus.Environment.Instance.Debug(connectedBenchmarkClients.Count + "/" + benchmarkNumClients + " clients connected."); } if (connectedBenchmarkClients.Count == benchmarkNumClients) { benchmarkInitialInboundEvents = Thalamus.Environment.Instance.InboundEventsTotal; benchmarkInitialOutboundEvents = Thalamus.Environment.Instance.OutboundEventsTotal; Thalamus.Environment.Instance.Debug("Starting benchmark..."); foreach (BenchmarkClient c in benchmarkClients) { c.StartBenchmark(); } runningBenchmark = true; } }