From c9e0cbed7c779a8999d35cbb28e55fc6c7e3087e Mon Sep 17 00:00:00 2001 From: Halil ibrahim Kalkan Date: Sat, 6 Apr 2019 23:54:46 +0300 Subject: [PATCH] Convert to static client count. --- .../Pages/SimulationArea.cshtml | 29 ++++++++-- .../Pages/SimulationArea.css | 13 ++++- .../Pages/SimulationArea.min.css | 2 +- .../Pages/SimulationArea.scss | 23 +++++++- .../Volo/ClientSimulation/Clients/Client.cs | 3 -- .../Volo/ClientSimulation/Clients/IClient.cs | 5 +- .../Scenarios/SleepScenarioStep.cs | 2 +- .../Volo/ClientSimulation/Simulation.cs | 54 +++++++++---------- 8 files changed, 87 insertions(+), 44 deletions(-) diff --git a/utils/client-simulation/src/Volo.ClientSimulation.Web/Pages/SimulationArea.cshtml b/utils/client-simulation/src/Volo.ClientSimulation.Web/Pages/SimulationArea.cshtml index fb97b9be73..a44d9e64b2 100644 --- a/utils/client-simulation/src/Volo.ClientSimulation.Web/Pages/SimulationArea.cshtml +++ b/utils/client-simulation/src/Volo.ClientSimulation.Web/Pages/SimulationArea.cshtml @@ -3,6 +3,7 @@ Layout = null; } @using Volo.ClientSimulation +@using Volo.ClientSimulation.Clients @model Volo.ClientSimulation.Web.Pages.SimulationAreaModel
@@ -19,9 +20,31 @@ @foreach (var clientHandler in Model.Simulation.ActiveClients) { - - [@clientHandler.Client.State] @clientHandler.Client.Scenario.GetDisplayText(): @clientHandler.Client.Scenario.CurrentStep.GetDisplayText() - + + + @if (clientHandler.Client.State == ClientState.Running) + { + + } + else if (clientHandler.Client.State == ClientState.Stopping) + { + + } + else if (clientHandler.Client.State == ClientState.Stopped) + { + + } + + + @clientHandler.Client.Scenario.GetDisplayText() + + + @if (clientHandler.Client.State != ClientState.Stopped) + { + | @clientHandler.Client.Scenario.CurrentStep.GetDisplayText() + } + + } \ No newline at end of file diff --git a/utils/client-simulation/src/Volo.ClientSimulation.Web/Pages/SimulationArea.css b/utils/client-simulation/src/Volo.ClientSimulation.Web/Pages/SimulationArea.css index 417b6990d5..0597dd34eb 100644 --- a/utils/client-simulation/src/Volo.ClientSimulation.Web/Pages/SimulationArea.css +++ b/utils/client-simulation/src/Volo.ClientSimulation.Web/Pages/SimulationArea.css @@ -1,8 +1,19 @@ .simulation-client { border: 1px solid #008000; - background-color: #d6ffce; + background-color: #f5f5f5; margin: 3px; padding: 5px; min-width: 250px; overflow: hidden; display: inline-block; } + .simulation-client.simulation-client-running { + background-color: #d6ffce; } + .simulation-client.simulation-client-stopping { + background-color: #fde0d7; } + .simulation-client .simulation-client-icon { + color: #999; } + .simulation-client .simulation-client-scenario { + font-weight: bold; } + .simulation-client .simulation-client-scenario-current-step { + color: #666; + font-size: 0.8em; } diff --git a/utils/client-simulation/src/Volo.ClientSimulation.Web/Pages/SimulationArea.min.css b/utils/client-simulation/src/Volo.ClientSimulation.Web/Pages/SimulationArea.min.css index 831d426b05..60855f964d 100644 --- a/utils/client-simulation/src/Volo.ClientSimulation.Web/Pages/SimulationArea.min.css +++ b/utils/client-simulation/src/Volo.ClientSimulation.Web/Pages/SimulationArea.min.css @@ -1 +1 @@ -.simulation-client{border:1px solid #008000;background-color:#d6ffce;margin:3px;padding:5px;min-width:250px;overflow:hidden;display:inline-block;} \ No newline at end of file +.simulation-client{border:1px solid #008000;background-color:#f5f5f5;margin:3px;padding:5px;min-width:250px;overflow:hidden;display:inline-block;}.simulation-client.simulation-client-running{background-color:#d6ffce;}.simulation-client.simulation-client-stopping{background-color:#fde0d7;}.simulation-client .simulation-client-icon{color:#999;}.simulation-client .simulation-client-scenario{font-weight:bold;}.simulation-client .simulation-client-scenario-current-step{color:#666;font-size:.8em;} \ No newline at end of file diff --git a/utils/client-simulation/src/Volo.ClientSimulation.Web/Pages/SimulationArea.scss b/utils/client-simulation/src/Volo.ClientSimulation.Web/Pages/SimulationArea.scss index 1a40c5d874..9f78c3e46d 100644 --- a/utils/client-simulation/src/Volo.ClientSimulation.Web/Pages/SimulationArea.scss +++ b/utils/client-simulation/src/Volo.ClientSimulation.Web/Pages/SimulationArea.scss @@ -1,9 +1,30 @@ .simulation-client { border: 1px solid #008000; - background-color: #d6ffce; + background-color: #f5f5f5; margin: 3px; padding: 5px; min-width: 250px; overflow: hidden; display: inline-block; + + &.simulation-client-running { + background-color: #d6ffce; + } + + &.simulation-client-stopping { + background-color: #fde0d7; + } + + .simulation-client-icon { + color: #999; + } + + .simulation-client-scenario { + font-weight: bold; + } + + .simulation-client-scenario-current-step { + color: #666; + font-size: 0.8em; + } } diff --git a/utils/client-simulation/src/Volo.ClientSimulation/Volo/ClientSimulation/Clients/Client.cs b/utils/client-simulation/src/Volo.ClientSimulation/Volo/ClientSimulation/Clients/Client.cs index 059c8b8ae5..6ec7d9b9c5 100644 --- a/utils/client-simulation/src/Volo.ClientSimulation/Volo/ClientSimulation/Clients/Client.cs +++ b/utils/client-simulation/src/Volo.ClientSimulation/Volo/ClientSimulation/Clients/Client.cs @@ -8,8 +8,6 @@ namespace Volo.ClientSimulation.Clients { public IScenario Scenario { get; } - public event EventHandler Stopped; - public ClientState State { get => _state; @@ -63,7 +61,6 @@ namespace Volo.ClientSimulation.Clients } State = ClientState.Stopped; - Stopped.InvokeSafely(this); } } } \ No newline at end of file diff --git a/utils/client-simulation/src/Volo.ClientSimulation/Volo/ClientSimulation/Clients/IClient.cs b/utils/client-simulation/src/Volo.ClientSimulation/Volo/ClientSimulation/Clients/IClient.cs index d056123c07..a882259a18 100644 --- a/utils/client-simulation/src/Volo.ClientSimulation/Volo/ClientSimulation/Clients/IClient.cs +++ b/utils/client-simulation/src/Volo.ClientSimulation/Volo/ClientSimulation/Clients/IClient.cs @@ -1,5 +1,4 @@ -using System; -using Volo.ClientSimulation.Scenarios; +using Volo.ClientSimulation.Scenarios; namespace Volo.ClientSimulation.Clients { @@ -7,8 +6,6 @@ namespace Volo.ClientSimulation.Clients { IScenario Scenario { get; } - event EventHandler Stopped; - ClientState State { get; } void Start(); diff --git a/utils/client-simulation/src/Volo.ClientSimulation/Volo/ClientSimulation/Scenarios/SleepScenarioStep.cs b/utils/client-simulation/src/Volo.ClientSimulation/Volo/ClientSimulation/Scenarios/SleepScenarioStep.cs index 499db9ac47..7791b0ccea 100644 --- a/utils/client-simulation/src/Volo.ClientSimulation/Volo/ClientSimulation/Scenarios/SleepScenarioStep.cs +++ b/utils/client-simulation/src/Volo.ClientSimulation/Volo/ClientSimulation/Scenarios/SleepScenarioStep.cs @@ -18,7 +18,7 @@ namespace Volo.ClientSimulation.Scenarios public override string GetDisplayText() { - return base.GetDisplayText() + $"({Duration})"; + return base.GetDisplayText() + $" ({Duration})"; } } } \ No newline at end of file diff --git a/utils/client-simulation/src/Volo.ClientSimulation/Volo/ClientSimulation/Simulation.cs b/utils/client-simulation/src/Volo.ClientSimulation/Volo/ClientSimulation/Simulation.cs index 783d4de39b..5e2883013b 100644 --- a/utils/client-simulation/src/Volo.ClientSimulation/Volo/ClientSimulation/Simulation.cs +++ b/utils/client-simulation/src/Volo.ClientSimulation/Volo/ClientSimulation/Simulation.cs @@ -20,6 +20,8 @@ namespace Volo.ClientSimulation protected IServiceScope ServiceScope { get; } + protected readonly object SyncObj = new object(); + public Simulation( IClientFactory clientFactory, IServiceScopeFactory serviceScopeFactory, @@ -29,55 +31,47 @@ namespace Volo.ClientSimulation Options = options.Value; ServiceScope = serviceScopeFactory.CreateScope(); ActiveClients = new List(); + + foreach (var scenarioConfiguration in Options.Scenarios) + { + for (int i = 0; i < scenarioConfiguration.ClientCount; i++) + { + var scenario = (IScenario) ServiceScope.ServiceProvider.GetRequiredService( + scenarioConfiguration.ScenarioType + ); + + ActiveClients.Add(ClientFactory.Create(scenario)); + } + } } public void Start() { - State = SimulationState.Starting; - - lock (ActiveClients) + lock (SyncObj) { - ActiveClients.Clear(); + State = SimulationState.Starting; - foreach (var scenarioConfiguration in Options.Scenarios) + foreach (var clientHandler in ActiveClients) { - for (int i = 0; i < scenarioConfiguration.ClientCount; i++) - { - var scenario = (IScenario) ServiceScope.ServiceProvider.GetRequiredService(scenarioConfiguration.ScenarioType); - var clientHandler = ClientFactory.Create(scenario); - - ActiveClients.Add(clientHandler); - clientHandler.Client.Stopped += ActiveClientOnStopped; - clientHandler.Client.Start(); - } + clientHandler.Client.Start(); } - } - State = SimulationState.Started; + State = SimulationState.Started; + } } public void Stop() { - State = SimulationState.Stopping; - - lock (ActiveClients) + lock (SyncObj) { + State = SimulationState.Stopping; + foreach (var activeClient in ActiveClients) { activeClient.Client.Stop(); } - } - State = SimulationState.Stopped; - } - - private void ActiveClientOnStopped(object sender, EventArgs e) - { - var client = (IClient) sender; - - lock (ActiveClients) - { - ActiveClients.RemoveAll(c => c.Client == client); + State = SimulationState.Stopped; } }