Browse Source

Convert to static client count.

pull/975/head
Halil ibrahim Kalkan 7 years ago
parent
commit
c9e0cbed7c
  1. 29
      utils/client-simulation/src/Volo.ClientSimulation.Web/Pages/SimulationArea.cshtml
  2. 13
      utils/client-simulation/src/Volo.ClientSimulation.Web/Pages/SimulationArea.css
  3. 2
      utils/client-simulation/src/Volo.ClientSimulation.Web/Pages/SimulationArea.min.css
  4. 23
      utils/client-simulation/src/Volo.ClientSimulation.Web/Pages/SimulationArea.scss
  5. 3
      utils/client-simulation/src/Volo.ClientSimulation/Volo/ClientSimulation/Clients/Client.cs
  6. 5
      utils/client-simulation/src/Volo.ClientSimulation/Volo/ClientSimulation/Clients/IClient.cs
  7. 2
      utils/client-simulation/src/Volo.ClientSimulation/Volo/ClientSimulation/Scenarios/SleepScenarioStep.cs
  8. 54
      utils/client-simulation/src/Volo.ClientSimulation/Volo/ClientSimulation/Simulation.cs

29
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
<abp-alert alert-type="Primary">
<form class="d-inline" id="StartButtonForm" method="post" asp-page-handler="Start" data-ajaxForm="true">
@ -19,9 +20,31 @@
<abp-card-body>
@foreach (var clientHandler in Model.Simulation.ActiveClients)
{
<span class="simulation-client">
[@clientHandler.Client.State] @clientHandler.Client.Scenario.GetDisplayText(): @clientHandler.Client.Scenario.CurrentStep.GetDisplayText()
</span>
<span class="simulation-client simulation-client-@clientHandler.Client.State.ToString().ToLowerInvariant()">
<span class="simulation-client-icon">
@if (clientHandler.Client.State == ClientState.Running)
{
<i class="fa fa-play"></i>
}
else if (clientHandler.Client.State == ClientState.Stopping)
{
<i class="fa fa-eject"></i>
}
else if (clientHandler.Client.State == ClientState.Stopped)
{
<i class="fa fa-stop"></i>
}
</span>
<span class="simulation-client-scenario">
@clientHandler.Client.Scenario.GetDisplayText()
</span>
<span class="simulation-client-scenario-current-step">
@if (clientHandler.Client.State != ClientState.Stopped)
{
<text>| @clientHandler.Client.Scenario.CurrentStep.GetDisplayText()</text>
}
</span>
</span>
}
</abp-card-body>
</abp-card>

13
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; }

2
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;}
.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;}

23
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;
}
}

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

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

2
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})";
}
}
}

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

Loading…
Cancel
Save