Skip to content

Commit 4020c51

Browse files
authored
Merge pull request #8 from NiceOneFox/T7_AddInputParams_AddOutputParams
T7 Add Service IResults. Add DI for FactoryBufferManager. Add random to requests
2 parents d8143dd + 3f80d5f commit 4020c51

File tree

16 files changed

+119
-26
lines changed

16 files changed

+119
-26
lines changed

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,19 @@ namespace Bll.Domain.Entities;
66

77
public class BufferManagerFactory : IBufferManagerFactory
88
{
9+
private readonly IServiceProvider serviceProvider;
10+
11+
public BufferManagerFactory(IServiceProvider serviceProvider)
12+
{
13+
this.serviceProvider = serviceProvider;
14+
}
15+
916
public IBufferManager CreateBufferManager(SimulationType simulationType)
1017
{
11-
return new StandardBufferManager();
18+
return simulationType switch
19+
{
20+
0 => (IBufferManager)serviceProvider.GetService(typeof(StandardBufferManager)),
21+
_ => throw new NotImplementedException()
22+
};
1223
}
1324
}

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

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,18 @@ namespace Bll.Domain.Entities;
55
public class DeviceManager : IDeviceManager
66
{
77
private readonly ITimeProvider _time;
8-
public DeviceManager(ITimeProvider time)
8+
9+
private readonly IResults _resultChannel;
10+
11+
private static readonly Random _random = new();
12+
13+
public double Lambda { get; set; }
14+
public double TimeOfDeviceWillBeFree { get; set; }
15+
16+
public DeviceManager(ITimeProvider time, IResults resultChannel)
917
{
1018
_time = time;
19+
_resultChannel = resultChannel;
1120
}
1221

1322
public void TakeRequest(Request request, Device device)
@@ -18,15 +27,19 @@ public void TakeRequest(Request request, Device device)
1827
}
1928
device.Request = request;
2029

30+
TimeOfDeviceWillBeFree = _time.Now +(-1.0 / Lambda) * Math.Log(_random.NextDouble());
2131
//TODO COUNT TIME OF WORKING ON THAT REQUEST
2232
}
2333

24-
public bool IsFree(Device device)
34+
public bool FreeDevice(Device device)
2535
{
26-
if (device.Request?.EndTime <= _time.Now)
36+
if (TimeOfDeviceWillBeFree <= _time.Now)
2737
{
38+
device.Request.EndTime = _time.Now;
39+
2840
device.Request = null;
2941
device.IsWorking = false;
42+
3043
// TODO COUNT THAT REQUEST WHICH IS END WORKING.
3144
}
3245
return true;
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using Api.enums;
2+
3+
namespace Bll.Domain.Entities;
4+
5+
public class InputParameters
6+
{
7+
public int NumberOfSources { get; set; } = 3;
8+
public int NumberOfDevices { get; set; } = 2;
9+
public int BufferSize { get; set; } = 2;
10+
public int AmountOfRequests { get; set; } = 40;
11+
public double ModelingTime { get; set; } = double.MaxValue;
12+
public SimulationType SimulationType { get; set; } = SimulationType.Standard;
13+
14+
public double Lambda { get; set; } = 3;
15+
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@ public class Request
44
{
55
public int NumberOfSource { get; set; }
66
public int SerialNumberOfSource { get; set; }
7-
public DateTime StartTime { get; set; }
8-
public DateTime EndTime { get; set; }
9-
10-
public Request(int numberOfSource, int serialNumberOfSource, DateTime startTime, DateTime endTime)
7+
public double StartTime { get; set; }
8+
public double EndTime { get; set; }
9+
10+
public Request(int numberOfSource, int serialNumberOfSource, double startTime, double endTime)
1111
{
1212
NumberOfSource = numberOfSource;
1313
SerialNumberOfSource = serialNumberOfSource;
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using Bll.Domain.Interfaces;
2+
3+
namespace Bll.Domain.Entities;
4+
5+
public class Results : IResults
6+
{
7+
public List<Request> Cancelled { get; set; } = new();
8+
public List<Request> Processed { get; set; } = new();
9+
public double ModelingTime { get; set; }
10+
}

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,22 @@ namespace Bll.Domain.Entities;
55
public class SourceManager : ISourceManager
66
{
77
public ITimeProvider Time { get; set; }
8+
public double TimeOfNextRequest { get; set; }
9+
public double Lambda { get; set; }
10+
11+
private static Random _random = new();
812
public SourceManager(ITimeProvider time)
913
{
1014
Time = time;
1115
}
1216

1317
public Request GetNewRequest(Source source)
1418
{
15-
var generatedRequest = new Request(source.SourceId, source.SerialNumber, Time.Now, DateTime.Now.AddMilliseconds(5.0));
19+
TimeOfNextRequest += -(1.0 / Lambda) * Math.Log(_random.NextDouble());
20+
21+
var generatedRequest = new Request(source.SourceId, source.SerialNumber, TimeOfNextRequest, -1);
1622
source.SerialNumber++;
23+
1724
return generatedRequest;
1825
}
1926
}

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

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,30 @@ namespace Bll.Domain.Entities;
44

55
public class StandardBufferManager : IBufferManager
66
{
7+
private readonly IResults _resultChannel;
8+
9+
private readonly ITimeProvider _time;
10+
711
private readonly LinkedList<Request> _requests = new();
812

913
public const int Capacity = 5;
1014

15+
public StandardBufferManager(IResults resultChannel, ITimeProvider time)
16+
{
17+
_resultChannel = resultChannel;
18+
_time = time;
19+
}
20+
1121
public void Add(Request request)
1222
{
23+
_time.Now = 0.6;
1324
if (_requests.Count >= Capacity)
1425
{
1526
var removedRequest = _requests.Last();
1627
_requests.RemoveLast();
17-
// TODO ADD ALL DELETED REQUESTS TO SOME LOGS OR SOURCE. variable removedRequest
28+
29+
removedRequest.EndTime = _time.Now;
30+
_resultChannel.Cancelled.Add(removedRequest);
1831
}
1932

2033
_requests.AddFirst(request);

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

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

55
public class TimeProvider : ITimeProvider
66
{
7-
public DateTime Now { get; } = DateTime.Now;
7+
public double Now { get; set; }
88
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
using Bll.Domain.Entities;
2+
3+
namespace Bll.Domain.Interfaces;
4+
5+
public interface IChannel
6+
{
7+
void AddRequest(Request request);
8+
}

backend/ServiceSimulation/Bll.Domain/Interfaces/IDeviceManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,5 +5,5 @@ namespace Bll.Domain.Interfaces;
55
public interface IDeviceManager
66
{
77
void TakeRequest(Request request, Device device);
8-
bool IsFree(Device device);
8+
bool FreeDevice(Device device);
99
}

0 commit comments

Comments
 (0)