Skip to content

Commit 3f80d5f

Browse files
committed
Add Service IResults. Add DI for FactoryBufferManager. Add random to requests
1 parent e8cf897 commit 3f80d5f

File tree

13 files changed

+89
-28
lines changed

13 files changed

+89
-28
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;

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

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@ namespace Bll.Domain.Entities;
44

55
public class InputParameters
66
{
7-
public int NumberOfSources { get; set; }
8-
public int NumberOfDevices { get; set; }
9-
public int BufferSize { get; set; }
10-
public int AmountOfRequests { get; set; }
11-
public double ModelingTime { get; set; }
12-
public SimulationType SimulationType { get; set; }
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;
1315
}
Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
namespace Bll.Domain.Entities;
1+
using Bll.Domain.Interfaces;
22

3-
public class Results
4-
{
5-
public List<Request> Cancelled = new();
3+
namespace Bll.Domain.Entities;
64

7-
public List<Request> Processed = new();
5+
public class Results : IResults
6+
{
7+
public List<Request> Cancelled { get; set; } = new();
8+
public List<Request> Processed { get; set; } = new();
89
public double ModelingTime { get; set; }
910
}

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, Time.Now + 0.11);
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
}

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
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
using Bll.Domain.Entities;
2+
3+
namespace Bll.Domain.Interfaces;
4+
5+
public interface IResults
6+
{
7+
public List<Request> Cancelled { get; set; }
8+
public List<Request> Processed { get; set; }
9+
double ModelingTime { get; set; }
10+
}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22

33
public interface ITimeProvider
44
{
5-
double Now { get; }
5+
double Now { get; set; }
66
}

0 commit comments

Comments
 (0)