mirror of https://github.com/abpframework/abp.git
17 changed files with 155 additions and 117 deletions
@ -1 +1 @@ |
|||
.simulation-client{border:1px solid #008000;background-color:#d6ffce;margin:3px;padding:5px;} |
|||
.simulation-client{border:1px solid #008000;background-color:#d6ffce;margin:3px;padding:5px;min-width:250px;overflow:hidden;display:inline-block;} |
|||
@ -1,15 +1,14 @@ |
|||
using System.Collections.Generic; |
|||
using Volo.ClientSimulation.Scenarios; |
|||
|
|||
namespace Volo.ClientSimulation |
|||
{ |
|||
public class ClientSimulationOptions |
|||
{ |
|||
public List<IScenario> Scenarios { get; } |
|||
public List<ScenarioConfiguration> Scenarios { get; } |
|||
|
|||
public ClientSimulationOptions() |
|||
{ |
|||
Scenarios = new List<IScenario>(); |
|||
Scenarios = new List<ScenarioConfiguration>(); |
|||
} |
|||
} |
|||
} |
|||
|
|||
@ -0,0 +1,13 @@ |
|||
using Volo.Abp.DependencyInjection; |
|||
using Volo.ClientSimulation.Scenarios; |
|||
|
|||
namespace Volo.ClientSimulation.Clients |
|||
{ |
|||
public class DefaultClientFactory : IClientFactory, ISingletonDependency |
|||
{ |
|||
public IDisposableClientHandler Create(IScenario scenario) |
|||
{ |
|||
return new DisposableClientHandler(new Client(scenario)); |
|||
} |
|||
} |
|||
} |
|||
@ -1,17 +0,0 @@ |
|||
using Volo.Abp.DependencyInjection; |
|||
|
|||
namespace Volo.ClientSimulation |
|||
{ |
|||
public class GlobalOptions : ISingletonDependency |
|||
{ |
|||
public int MaxClientCount { get; set; } = 2; |
|||
|
|||
public GlobalOptions Clone() |
|||
{ |
|||
return new GlobalOptions |
|||
{ |
|||
MaxClientCount = MaxClientCount |
|||
}; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,19 @@ |
|||
using System; |
|||
|
|||
namespace Volo.ClientSimulation |
|||
{ |
|||
public class ScenarioConfiguration |
|||
{ |
|||
public Type ScenarioType { get; } |
|||
|
|||
public int ClientCount { get; } |
|||
|
|||
public ScenarioConfiguration( |
|||
Type scenarioType, |
|||
int clientCount = 1) |
|||
{ |
|||
ScenarioType = scenarioType; |
|||
ClientCount = clientCount; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,13 @@ |
|||
using Volo.Abp; |
|||
|
|||
namespace Volo.ClientSimulation.Scenarios |
|||
{ |
|||
public class DemoScenario : Scenario |
|||
{ |
|||
public DemoScenario() |
|||
{ |
|||
AddStep(new SleepScenarioStep(RandomHelper.GetRandom(1000, 5000))); |
|||
AddStep(new SleepScenarioStep(RandomHelper.GetRandom(2000, 6000))); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,17 @@ |
|||
using System.Collections.Generic; |
|||
|
|||
namespace Volo.ClientSimulation.Scenarios |
|||
{ |
|||
public interface IScenario |
|||
{ |
|||
IReadOnlyList<IScenarioStep> Steps { get; } |
|||
|
|||
IScenarioStep CurrentStep { get; } |
|||
|
|||
int CurrentStepIndex { get; } |
|||
|
|||
string GetDisplayText(); |
|||
|
|||
void Proceed(); |
|||
} |
|||
} |
|||
@ -0,0 +1,9 @@ |
|||
namespace Volo.ClientSimulation.Scenarios |
|||
{ |
|||
public interface IScenarioStep |
|||
{ |
|||
void Run(); |
|||
|
|||
string GetDisplayText(); |
|||
} |
|||
} |
|||
@ -0,0 +1,16 @@ |
|||
using System; |
|||
|
|||
namespace Volo.ClientSimulation.Scenarios |
|||
{ |
|||
public abstract class ScenarioStep : IScenarioStep |
|||
{ |
|||
public abstract void Run(); |
|||
|
|||
public virtual string GetDisplayText() |
|||
{ |
|||
return GetType() |
|||
.Name |
|||
.RemovePostFix(nameof(ScenarioStep)); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,24 @@ |
|||
using System.Threading; |
|||
|
|||
namespace Volo.ClientSimulation.Scenarios |
|||
{ |
|||
public class SleepScenarioStep : ScenarioStep |
|||
{ |
|||
public int Duration { get; } |
|||
|
|||
public SleepScenarioStep(int duration = 1000) |
|||
{ |
|||
Duration = duration; |
|||
} |
|||
|
|||
public override void Run() |
|||
{ |
|||
Thread.Sleep(Duration); |
|||
} |
|||
|
|||
public override string GetDisplayText() |
|||
{ |
|||
return base.GetDisplayText() + $"({Duration})"; |
|||
} |
|||
} |
|||
} |
|||
Loading…
Reference in new issue