Files
6098/Cowain.Bake.Communication/Scan/ScanCodeManage.cs

70 lines
2.1 KiB
C#
Raw Normal View History

using Cowain.Bake.BLL;
using Cowain.Bake.Common;
using Cowain.Bake.Common.Core;
using Cowain.Bake.Common.Enums;
using Cowain.Bake.Communication.Interface;
using Cowain.Bake.Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using Unity;
namespace Cowain.Bake.Communication.Scan
{
public class ScanCodeManage
{
private List<TDeviceConfig> scanCodeList;
IUnityContainer _unityContainer;
public ScanCodeManage(IUnityContainer unityContainer)
{
_unityContainer = unityContainer;
scanCodeList = unityContainer.Resolve<DeviceConfigService>().GetConfig(EDeviceType.SCANNER);
List<Task> listTask = new List<Task>();
foreach (var item in scanCodeList)
{
Assembly asm = Assembly.GetExecutingAssembly(); //获得当前程序的绝对路径
Type type = asm.GetType(MyPath.SCAN + item.DriverName);
unityContainer.RegisterSingleton(typeof(IScanCodeBase), type, item.Name);
var scanCode = _unityContainer.Resolve<IScanCodeBase>(item.Name); //几个PLC就实例化几个
scanCode.Id = item.Id;
scanCode.Name = item.Name;
scanCode.DeviceName = item.DriverName;
scanCode.GetJsonParam(item.Json);
if (item.Enable)
{
listTask.Add(Task.Run(() =>
{
scanCode.Connect();
}));
}
}
Task.WaitAll(listTask.ToArray());
Task.Run(async () =>
{
while(true)
{
await Task.Delay(5000);
CheckConnect();
}
});
}
void CheckConnect()
{
var scanCodes = _unityContainer.ResolveAll<IScanCodeBase>();
foreach(var item in scanCodes)
{
bool b = item.IsConnect;
}
}
}
}