77 lines
2.1 KiB
C#
77 lines
2.1 KiB
C#
using System;
|
|
using System.Threading;
|
|
using System.Threading.Tasks;
|
|
using Interfaces;
|
|
|
|
namespace IrDaemonNotifier
|
|
{
|
|
public class IrDaemonTransponderUtilities : ITransponderUtilityProvider
|
|
{
|
|
private readonly ILoggerService _logger;
|
|
private int _lastScannedId = -1;
|
|
private readonly object _lastScanedLock = new object();
|
|
private readonly Thread _idRefreshThread;
|
|
private bool _killRefreshThread;
|
|
|
|
public IrDaemonTransponderUtilities(ILoggerService logger)
|
|
{
|
|
_logger = logger;
|
|
_idRefreshThread = new Thread(IrDaemonInterrogation)
|
|
{
|
|
IsBackground = true,
|
|
Name = "Ir Daemon Id Update Thread",
|
|
Priority = ThreadPriority.BelowNormal
|
|
};
|
|
_killRefreshThread = false;
|
|
_idRefreshThread.Start();
|
|
}
|
|
|
|
private void IrDaemonInterrogation()
|
|
{
|
|
while (!_killRefreshThread)
|
|
{
|
|
try
|
|
{
|
|
var communicator = new IrDaemonCommunicator(_logger);
|
|
var lastId = communicator.RequestData<int>(Commands.Properties.GetLastToken);
|
|
lock (_lastScanedLock)
|
|
{
|
|
_lastScannedId = lastId;
|
|
}
|
|
Thread.Sleep(500);
|
|
}
|
|
catch (Exception e)
|
|
{
|
|
_logger.Error(e);
|
|
}
|
|
}
|
|
}
|
|
|
|
~IrDaemonTransponderUtilities()
|
|
{
|
|
_killRefreshThread = true;
|
|
if (_idRefreshThread.IsAlive)
|
|
{
|
|
_idRefreshThread.Abort();
|
|
}
|
|
}
|
|
|
|
public Task<int> GetLastScannedIdAsync()
|
|
{
|
|
return Task.Run(()=>GetLastId());
|
|
}
|
|
|
|
public PluginDetails GetPluginDetails()
|
|
{
|
|
return Resources.Details;
|
|
}
|
|
|
|
private int GetLastId()
|
|
{
|
|
lock (_lastScanedLock)
|
|
{
|
|
return _lastScannedId;
|
|
}
|
|
}
|
|
}
|
|
} |