forked from ddrilling/AsbCloudServer
56 lines
1.7 KiB
C#
56 lines
1.7 KiB
C#
|
using AsbCloudDb.Model.Subsystems;
|
|||
|
using System;
|
|||
|
|
|||
|
namespace AsbCloudInfrastructure.Services.Subsystems
|
|||
|
{
|
|||
|
public class SubsystemDetector
|
|||
|
{
|
|||
|
private readonly int idTelemetry;
|
|||
|
private readonly int idSubsystem;
|
|||
|
private readonly Func<short?, bool> isEnable;
|
|||
|
private readonly Func<SubsystemOperationTime, bool> isValid;
|
|||
|
(bool isEnable, DateTimeOffset date, float depth) pre = default;
|
|||
|
|
|||
|
public SubsystemDetector(
|
|||
|
int idTelemetry,
|
|||
|
int idSubsystem,
|
|||
|
Func<short?, bool> isEnable,
|
|||
|
Func<SubsystemOperationTime, bool> isValid)
|
|||
|
{
|
|||
|
this.idTelemetry = idTelemetry;
|
|||
|
this.idSubsystem = idSubsystem;
|
|||
|
this.isEnable = isEnable;
|
|||
|
this.isValid = isValid;
|
|||
|
}
|
|||
|
|
|||
|
public SubsystemOperationTime? Detect(short? mode, DateTimeOffset date, float depth)
|
|||
|
{
|
|||
|
var isEnable = this.isEnable(mode);
|
|||
|
|
|||
|
if (!pre.isEnable && isEnable)
|
|||
|
{
|
|||
|
pre = (true, date, depth);
|
|||
|
}
|
|||
|
else if (pre.isEnable && !isEnable)
|
|||
|
{
|
|||
|
var subsystemOperationTime = new SubsystemOperationTime
|
|||
|
{
|
|||
|
IdTelemetry = idTelemetry,
|
|||
|
IdSubsystem = idSubsystem,
|
|||
|
DateStart = pre.date,
|
|||
|
DateEnd = date,
|
|||
|
DepthStart = pre.depth,
|
|||
|
DepthEnd = depth,
|
|||
|
};
|
|||
|
pre.isEnable = false;
|
|||
|
if (!isValid(subsystemOperationTime))
|
|||
|
return null;
|
|||
|
|
|||
|
return subsystemOperationTime;
|
|||
|
|
|||
|
}
|
|||
|
return null;
|
|||
|
}
|
|||
|
}
|
|||
|
}
|