86 lines
2.1 KiB
C#
86 lines
2.1 KiB
C#
using System.Diagnostics.CodeAnalysis;
|
|
using System.Reflection;
|
|
using DispenserHal.Camera.Client;
|
|
using DispenserHal.Camera.DTO;
|
|
using DispenserHal.Camera.Enum;
|
|
using DispenserHal.Camera.Interface;
|
|
using Serilog;
|
|
|
|
namespace DispenserHal.Camera.Factory;
|
|
|
|
public sealed class CameraFactory
|
|
{
|
|
private static AbstractCamera cameraSDK;
|
|
private static Type instanceType;
|
|
|
|
private static CameraConfig _config;
|
|
|
|
static CameraFactory()
|
|
{
|
|
InitType();
|
|
}
|
|
|
|
private static void InitType()
|
|
{
|
|
var asmb = Assembly.LoadFrom(CameraConfig.Dll);
|
|
instanceType = asmb.GetType(CameraConfig.Sdk);
|
|
if (instanceType == null)
|
|
{
|
|
Log.Error("加载sdk{0}失败", CameraConfig.Sdk);
|
|
throw new FileNotFoundException(CameraConfig.Sdk);
|
|
}
|
|
}
|
|
|
|
public static Builder ToBuilder(string sn)
|
|
{
|
|
return new Builder(sn);
|
|
}
|
|
|
|
private static CameraClient GetClient([NotNull] string sn, Dictionary<ParamTypeEnum, string> paramMap)
|
|
{
|
|
if (!CameraContainer.ContainsClient(sn))
|
|
{
|
|
var client = InitClient(sn, paramMap);
|
|
CameraContainer.AddClient(sn, client);
|
|
}
|
|
|
|
return CameraContainer.GetClient(sn);
|
|
}
|
|
|
|
private static CameraClient InitClient(string sn, Dictionary<ParamTypeEnum, string> paramMap)
|
|
{
|
|
object[] constructorArgs = [sn, paramMap];
|
|
cameraSDK = Activator.CreateInstance(instanceType, constructorArgs) as AbstractCamera;
|
|
var client = new CameraClient(cameraSDK);
|
|
Log.Information($"{sn}相机客户端初始化成功");
|
|
return client;
|
|
}
|
|
|
|
public class Builder
|
|
{
|
|
private Dictionary<ParamTypeEnum, string> _param;
|
|
private string _sn;
|
|
|
|
public Builder(string sn)
|
|
{
|
|
_sn = sn;
|
|
}
|
|
|
|
public Builder SN(string sn)
|
|
{
|
|
_sn = sn;
|
|
return this;
|
|
}
|
|
|
|
public Builder Param(Dictionary<ParamTypeEnum, string> param)
|
|
{
|
|
_param = param;
|
|
return this;
|
|
}
|
|
|
|
public CameraClient build()
|
|
{
|
|
return GetClient(_sn, _param);
|
|
}
|
|
}
|
|
} |