Пример #1
0
        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();
            }
        }
Пример #2
0
 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;
     }
 }