using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.BL.Entities; using Tango.Integration.Operation; using Tango.Telemetry.Mappers; using Tango.Telemetry.Telemetries; namespace Tango.Telemetry.Sources { public class TelemetryEventsStreamingSource : ITelemetryStreamingSource { private IMachineOperator _machineOperator; public bool IsStarted { get; private set; } public string Name { get; } = "Events Streaming"; public bool RequiresTelemetryDuplicationTracking { get; } = true; public event EventHandler TelemetryAvailable; public TelemetryEventsStreamingSource(IMachineOperator machineOperator) { _machineOperator = machineOperator; } private void MachineEventsStateProvider_NewEvents(object sender, IEnumerable events) { if (IsStarted) { foreach (var ev in events) { TelemetryEvent t = EventMapper.MapEvent(ev); TelemetryAvailable?.Invoke(this, new TelemetryAvailableEventArgs() { TelemetryObject = t }); } } } public void Start() { if (!IsStarted) { IsStarted = true; _machineOperator.MachineEventsStateProvider.NewEvents += MachineEventsStateProvider_NewEvents; } } public void Stop() { if (IsStarted) { IsStarted = false; _machineOperator.MachineEventsStateProvider.NewEvents -= MachineEventsStateProvider_NewEvents; } } public void Dispose() { Stop(); } } }