Skip to content

Commit b68e618

Browse files
authored
Merge pull request #24 from NiceOneFox/T19_Add_LIFO_BufferManager
Close T19 Add Lifo buffer manager
2 parents d613254 + 7424331 commit b68e618

File tree

8 files changed

+63
-10
lines changed

8 files changed

+63
-10
lines changed

backend/ServiceSimulation/Api/Validation/InputParametersValidator.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public InputParametersValidator()
1515
RuleFor(p => p.LambdaForDevice).NotEmpty().ExclusiveBetween(0, 10000);
1616
RuleFor(p => p.NumberOfSources).NotEmpty().ExclusiveBetween(0, 10000);
1717
RuleFor(p => p.ModelingTime).NotEmpty().ExclusiveBetween(0, 10000);
18-
RuleFor(p => p.SimulationType).IsInEnum();
18+
RuleFor(p => p.BufferType).IsInEnum();
1919
}
2020
}
2121
}

backend/ServiceSimulation/Bll.Domain/Entities/BufferManagerFactory.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,15 @@ public BufferManagerFactory(IServiceProvider serviceProvider)
1414
_serviceProvider = serviceProvider;
1515
}
1616

17-
public IBufferManager CreateBufferManager(SimulationType simulationType, int capacity)
17+
public IBufferManager CreateBufferManager(BufferType bufferType, int capacity)
1818
{
19-
return simulationType switch
19+
return bufferType switch
2020
{
21-
0 => new StandardBufferManager(_serviceProvider.GetRequiredService<IResults>(),
21+
BufferType.FIFO => new StandardBufferManager(_serviceProvider.GetRequiredService<IResults>(),
2222
_serviceProvider.GetRequiredService<ITimeProvider>(), capacity),
23+
BufferType.LIFO => new LIFOBufferManager(_serviceProvider.GetRequiredService<IResults>(),
24+
_serviceProvider.GetRequiredService<ITimeProvider>(), capacity),
25+
2326
_ => throw new NotImplementedException()
2427
};
2528
}
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
using Bll.Domain.Interfaces;
2+
using Bll.Domain.Models;
3+
4+
namespace Bll.Domain.Entities
5+
{
6+
public class LIFOBufferManager : IBufferManager
7+
{
8+
private readonly IResults _results;
9+
10+
private readonly ITimeProvider _time;
11+
12+
private readonly LinkedList<Request> _requests = new();
13+
14+
public readonly int Capacity = 4;
15+
16+
public LIFOBufferManager(IResults resultChannel, ITimeProvider time, int capacity)
17+
{
18+
_results = resultChannel;
19+
_time = time;
20+
Capacity = capacity;
21+
}
22+
23+
public void Add(Request request)
24+
{
25+
if (_requests.Count >= Capacity)
26+
{
27+
var removedRequest = _requests.Last();
28+
_requests.RemoveLast();
29+
30+
removedRequest.EndTime = _time.Now;
31+
_results.Cancelled.Add(removedRequest);
32+
}
33+
34+
_requests.AddFirst(request);
35+
}
36+
37+
public Request Get()
38+
{
39+
if (IsFree()) throw new ArgumentNullException("Buffer was empty"); // TODO template string for Ex
40+
41+
var requestFromBuffer = _requests.First();
42+
_requests.RemoveFirst();
43+
44+
return requestFromBuffer;
45+
}
46+
47+
public bool IsFree() => _requests.Count == 0;
48+
}
49+
}

backend/ServiceSimulation/Bll.Domain/Entities/StandardBufferManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ public class StandardBufferManager : IBufferManager
1111

1212
private readonly LinkedList<Request> _requests = new();
1313

14-
public int Capacity = 4;
14+
public readonly int Capacity = 4;
1515

1616
public StandardBufferManager(IResults resultChannel, ITimeProvider time, int capacity)
1717
{

backend/ServiceSimulation/Bll.Domain/Factories/IBufferManagerFactory.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@ namespace Bll.Domain.Factories;
55

66
public interface IBufferManagerFactory
77
{
8-
IBufferManager CreateBufferManager(SimulationType simulationType, int capacity);
8+
IBufferManager CreateBufferManager(BufferType simulationType, int capacity);
99
}

backend/ServiceSimulation/Bll.Domain/Models/InputParameters.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ public class InputParameters
99
public int BufferSize { get; set; } = 2;
1010
public int AmountOfRequests { get; set; } = 40;
1111
public double ModelingTime { get; set; } = double.MaxValue;
12-
public SimulationType SimulationType { get; set; } = SimulationType.Standard;
12+
public BufferType BufferType { get; set; } = BufferType.FIFO;
1313
public double LambdaForRequests { get; set; } = 3;
1414
public double LambdaForDevice { get; set; } = 3;
1515
}

backend/ServiceSimulation/Bll.Domain/Services/SimulationService.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public void StartSimulation(InputParameters parameters)
5454
});
5555
}
5656

57-
var bufferManager = _bufferManagerFactory.CreateBufferManager(parameters.SimulationType, parameters.BufferSize);
57+
var bufferManager = _bufferManagerFactory.CreateBufferManager(parameters.BufferType, parameters.BufferSize);
5858

5959
foreach (var source in sources) // Generate first requests that generated by sources.
6060
{
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
namespace Api.enums;
22

3-
public enum SimulationType
3+
public enum BufferType
44
{
5-
Standard = 0
5+
FIFO = 0,
6+
LIFO = 1
67
}

0 commit comments

Comments
 (0)