using System;
using SHJX.Service.Model.Control;
using SHJX.Service.Common.ReadXML;
using SHJX.Service.Common.UserTimer;
using SHJX.Service.Common.UserDelegate;
using SHJX.Service.Control.TimerControl.ChangeTaskState;
using SHJX.Service.Control.TimerControl.WriteTaskToEquipment;
using SHJX.Service.ServerClient;
using SHJX.Service.Common.Logging;
using Microsoft.Extensions.Logging;
namespace SHJX.Service.Control
{
///
/// 任务控制
///
public sealed class TimerController
{
private static readonly ILogger logger = LogFactory.BuildLogger(typeof(TimerController));
///
/// 日志
///
private readonly ReadConfigUtil _config;
private readonly WriteTaskFactory _writeTaskFactory;
private readonly ChangeStateFactory _changeStateFactory;
#region 定时器
private static TimerProcessor _changeTaskStateProcessor;
private static TimerProcessor _writeTaskProcessor;
private static TimerProcessor _changeWashTaskStateProcessor;
private static TimerProcessor _writeWashTaskProcessor;
private static TimerProcessor _changeBdTaskStateProcessor;
private static TimerProcessor _writeBdTaskProcessor;
private static TimerProcessor _writeSpTaskProcessor;
private static TimerProcessor _readTemperatureProcessor;
#endregion
public TimerController( ReadConfigUtil config)
{
try
{
_config = config;
var operateController = new FlowContent( config);
_writeTaskFactory = new WriteTaskFactory( config, operateController);
_changeStateFactory = new ChangeStateFactory( config);
}
catch (Exception ex)
{
logger.LogError(ex.ToString());
}
}
public void Start()
{
try
{
_changeTaskStateProcessor = new TimerProcessor("Change_TaskState", 1000);
_changeTaskStateProcessor.OnTimer += _changeStateFactory.Get("Sample").ChangeEquipmentTaskStateEvent;
_changeTaskStateProcessor.Start();
_writeTaskProcessor = new TimerProcessor("WriteTask", 1000);
_writeTaskProcessor.OnTimer += _writeTaskFactory.Get("Sample").WriteTaskToEquipmentEvent;
_writeTaskProcessor.Start();
_changeWashTaskStateProcessor = new TimerProcessor("ChangeWashTaskState", 1000);
_changeWashTaskStateProcessor.OnTimer += _changeStateFactory.Get("Wash").ChangeEquipmentTaskStateEvent;
_changeWashTaskStateProcessor.Start();
_writeWashTaskProcessor = new TimerProcessor("WriteWashTask", 1000);
_writeWashTaskProcessor.OnTimer += _writeTaskFactory.Get("Wash").WriteTaskToEquipmentEvent;
_writeWashTaskProcessor.Start();
_changeBdTaskStateProcessor = new TimerProcessor("ChangeBDTaskState", 1000);
_changeBdTaskStateProcessor.OnTimer += _changeStateFactory.Get("Calibration").ChangeEquipmentTaskStateEvent;
_changeBdTaskStateProcessor.Start();
_writeBdTaskProcessor = new TimerProcessor("WriteBDTask", 1000);
_writeBdTaskProcessor.OnTimer += _writeTaskFactory.Get("Calibration").WriteTaskToEquipmentEvent;
_writeBdTaskProcessor.Start();
_writeSpTaskProcessor = new TimerProcessor("WriteSPTask", 1000);
_writeSpTaskProcessor.OnTimer += _writeTaskFactory.Get("SinglePoint").WriteTaskToEquipmentEvent;
_writeSpTaskProcessor.Start();
_readTemperatureProcessor = new TimerProcessor("ReadTemperature", 2000);
_readTemperatureProcessor.OnTimer += ReadTemperatureProcessor_OnTimer;
_readTemperatureProcessor.Start();
}
catch (Exception ex)
{
logger.LogError(ex.Message);
}
}
private OptClient _client;
private OptClient Client
{
get
{
if (_client is null)
{
_client = new OptClient( _config);
}
return _client;
}
}
public void ReadTemperatureProcessor_OnTimer()
{
try
{
var portArgs = new PortArgs
{
TypeName = "Heat"
};
var currentTemperature = Client.Factory("Heat").Read(portArgs);
Messager.Send("ChangeTemperature", currentTemperature);
}
catch (Exception)
{
throw;
}
}
}
}