|
|
@@ -1,18 +1,10 @@
|
|
|
-using Newtonsoft.Json.Linq;
|
|
|
-using System;
|
|
|
+using Microsoft.AspNetCore.Http;
|
|
|
+using Newtonsoft.Json.Linq;
|
|
|
using System.Collections.Concurrent;
|
|
|
-using System.Collections.Generic;
|
|
|
-using System.Diagnostics;
|
|
|
-using System.IO;
|
|
|
-using System.Linq;
|
|
|
-using System.Net;
|
|
|
using System.Reflection;
|
|
|
-using System.Reflection.Metadata;
|
|
|
-using System.Text;
|
|
|
-using System.Text.RegularExpressions;
|
|
|
-using System.Threading.Tasks;
|
|
|
using YSAI.Core.data;
|
|
|
using YSAI.Core.@enum;
|
|
|
+using YSAI.Core.@interface.only;
|
|
|
using YSAI.Core.@interface.unify;
|
|
|
using YSAI.Unility;
|
|
|
|
|
|
@@ -21,9 +13,9 @@ namespace YSAI.DaqManage
|
|
|
/// <summary>
|
|
|
/// 采集管理操作,
|
|
|
/// 库:*.dll,
|
|
|
- /// 库配置:命名空间 + 类名.SN.Config.json
|
|
|
+ /// 库配置:命名空间 + 类名.ISn.Config.json
|
|
|
/// </summary>
|
|
|
- public class DaqManageOperate : IBaseAbstract
|
|
|
+ public class DaqManageOperate : IBaseAbstract, IDaqManage
|
|
|
{
|
|
|
protected override string LogHead => "[ DaqManageOperate 操作 ]";
|
|
|
protected override string ClassName => "DaqManageOperate";
|
|
|
@@ -73,7 +65,7 @@ namespace YSAI.DaqManage
|
|
|
{
|
|
|
try
|
|
|
{
|
|
|
- if (File.Exists(ConfigFile)) //配置存在
|
|
|
+ if (System.IO.File.Exists(ConfigFile)) //配置存在
|
|
|
{
|
|
|
return JsonTool.StringToJsonEntity<DaqManageData.Basics>(FileTool.FileToString(ConfigFile));
|
|
|
}
|
|
|
@@ -100,7 +92,7 @@ namespace YSAI.DaqManage
|
|
|
//实体转JSON字符串
|
|
|
string json = JsonTool.JsonEntityToString(basics);
|
|
|
//写入文件
|
|
|
- File.WriteAllText(ConfigFile, JsonTool.JsonFormatting(json));
|
|
|
+ System.IO.File.WriteAllText(ConfigFile, JsonTool.JsonFormatting(json));
|
|
|
return true;
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
@@ -209,13 +201,13 @@ namespace YSAI.DaqManage
|
|
|
/// <param name="Type">【0:库文件】【1:配置文件】</param>
|
|
|
private void Watcher_Deleted(object sender, FileSystemEventArgs e, int Type)
|
|
|
{
|
|
|
- //程序集SN
|
|
|
+ //程序集ISn
|
|
|
string TypeIocSN = string.Empty;
|
|
|
switch (Type)
|
|
|
{
|
|
|
case 0:
|
|
|
OnEventHandler?.Invoke(this, new EventResult(true, $"{e.Name} 文件被删除,移除此库程序集,并移除所有实例"));
|
|
|
- //程序集SN
|
|
|
+ //程序集ISn
|
|
|
TypeIocSN = e.Name.Replace(".dll", string.Empty);
|
|
|
|
|
|
foreach (var item in InstanceIoc)
|
|
|
@@ -251,9 +243,9 @@ namespace YSAI.DaqManage
|
|
|
break;
|
|
|
case 1:
|
|
|
OnEventHandler?.Invoke(this, new EventResult(true, $"{e.Name} 文件被删除,移除对应配置实例"));
|
|
|
- //实例的SN
|
|
|
+ //实例的ISn
|
|
|
string InstanceIocSN = e.Name.Replace(basics.ConfigReplaceFormat, string.Empty);
|
|
|
- //程序集SN
|
|
|
+ //程序集ISn
|
|
|
TypeIocSN = InstanceIocSN.Replace($".{InstanceIocSN.Split('.')[InstanceIocSN.Split('.').Length - 1]}", string.Empty);
|
|
|
if (InstanceIoc.ContainsKey(InstanceIocSN))
|
|
|
{
|
|
|
@@ -301,7 +293,7 @@ namespace YSAI.DaqManage
|
|
|
{
|
|
|
string path = String.Format(e.FullPath);
|
|
|
string? filename = Path.GetFileName(path);
|
|
|
- using (Stream fs = File.OpenRead(@path))
|
|
|
+ using (Stream fs = System.IO.File.OpenRead(@path))
|
|
|
{
|
|
|
StreamReader srdPreview = new StreamReader(fs);
|
|
|
String temp = string.Empty;
|
|
|
@@ -313,11 +305,11 @@ namespace YSAI.DaqManage
|
|
|
srdPreview.Close();
|
|
|
srdPreview.Dispose();
|
|
|
|
|
|
- //实例的SN
|
|
|
+ //实例的ISn
|
|
|
string InstanceIocSN = e.Name.Replace(basics.ConfigReplaceFormat, string.Empty);
|
|
|
- //程序集SN
|
|
|
+ //程序集ISn
|
|
|
string TypeIocSN = InstanceIocSN.Replace($".{InstanceIocSN.Split('.')[InstanceIocSN.Split('.').Length - 1]}", string.Empty);
|
|
|
- //判断是否存在此程序集SN
|
|
|
+ //判断是否存在此程序集ISn
|
|
|
if (TypeIoc.ContainsKey(TypeIocSN))
|
|
|
{
|
|
|
if (!InstanceIoc.ContainsKey(InstanceIocSN))
|
|
|
@@ -481,7 +473,6 @@ namespace YSAI.DaqManage
|
|
|
/// </summary>
|
|
|
/// <param name="sender"></param>
|
|
|
/// <param name="e"></param>
|
|
|
- /// <exception cref="NotImplementedException"></exception>
|
|
|
private void Instance_OnEvent(object? sender, EventResult e)
|
|
|
{
|
|
|
//抛出信息
|
|
|
@@ -576,7 +567,30 @@ namespace YSAI.DaqManage
|
|
|
else
|
|
|
return false;
|
|
|
}
|
|
|
-
|
|
|
+ /// <summary>
|
|
|
+ /// 写入文件
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="file">文件</param>
|
|
|
+ /// <param name="path">路径</param>
|
|
|
+ private static void WriteFile(IFormFile file, string path)
|
|
|
+ {
|
|
|
+ var stream = file.OpenReadStream();
|
|
|
+
|
|
|
+ // 把 Stream 转换成 byte[]
|
|
|
+ byte[] bytes = new byte[stream.Length];
|
|
|
+ stream.Read(bytes, 0, bytes.Length);
|
|
|
+
|
|
|
+ // 设置当前流的位置为流的开始
|
|
|
+ stream.Seek(0, SeekOrigin.Begin);
|
|
|
+
|
|
|
+ // 把 byte[] 写入文件
|
|
|
+ FileStream fs = new FileStream(path, FileMode.Create);
|
|
|
+
|
|
|
+ BinaryWriter bw = new BinaryWriter(fs);
|
|
|
+ bw.Write(bytes);
|
|
|
+ bw.Close();
|
|
|
+ fs.Close();
|
|
|
+ }
|
|
|
/// <summary>
|
|
|
/// 这是释放所有包含自身对象
|
|
|
/// </summary>
|
|
|
@@ -594,24 +608,19 @@ namespace YSAI.DaqManage
|
|
|
GC.SuppressFinalize(this);
|
|
|
ThisObjList = null;
|
|
|
}
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 释放
|
|
|
- /// </summary>
|
|
|
- /// <param name="SN">实例的唯一标识符</param>
|
|
|
- public OperateResult Dispose(string SN)
|
|
|
+ public OperateResult DisposeISn(string ISn)
|
|
|
{
|
|
|
Depart("Dispose");
|
|
|
try
|
|
|
{
|
|
|
- if (InstanceIoc.ContainsKey(SN))
|
|
|
+ if (InstanceIoc.ContainsKey(ISn))
|
|
|
{
|
|
|
- InstanceIoc[SN].Dispose();
|
|
|
- return Break("Dispose", true);
|
|
|
+ OperateResult operateResult = RemoveISn(ISn);
|
|
|
+ return Break("Dispose", operateResult.State, operateResult.Message);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- return Break("Dispose", false, $"未找到 {SN} 的实例");
|
|
|
+ return Break("Dispose", false, $"未找到 {ISn} 的实例");
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
@@ -619,21 +628,15 @@ namespace YSAI.DaqManage
|
|
|
return Break("Dispose", false, ex.Message);
|
|
|
}
|
|
|
}
|
|
|
- /// <summary>
|
|
|
- /// 释放
|
|
|
- /// </summary>
|
|
|
- /// <param name="SN">实例的唯一标识符</param>
|
|
|
- /// <returns>统一出参</returns>
|
|
|
- public Task<OperateResult> DisposeAsync(string SN)
|
|
|
+ public List<string>? TypeSns()
|
|
|
{
|
|
|
- return Task.Run(() => Dispose(SN));
|
|
|
+ if (TypeIoc != null)
|
|
|
+ {
|
|
|
+ return TypeIoc.Keys.ToList();
|
|
|
+ }
|
|
|
+ return null;
|
|
|
}
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 实例列表
|
|
|
- /// </summary>
|
|
|
- /// <returns>实例数组</returns>
|
|
|
- public List<string>? InstanceList()
|
|
|
+ public List<string>? InstanceSns()
|
|
|
{
|
|
|
if (InstanceIoc != null)
|
|
|
{
|
|
|
@@ -641,30 +644,31 @@ namespace YSAI.DaqManage
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
- /// <summary>
|
|
|
- /// 移除实例
|
|
|
- /// </summary>
|
|
|
- /// <param name="SN">实例的唯一标识符</param>
|
|
|
- /// <returns>统一出参</returns>
|
|
|
- public OperateResult Remove(string SN)
|
|
|
+ public OperateResult RemoveISn(string ISn)
|
|
|
{
|
|
|
Depart("Remove");
|
|
|
try
|
|
|
{
|
|
|
- if (InstanceIoc.ContainsKey(SN))
|
|
|
+ if (InstanceIoc.ContainsKey(ISn))
|
|
|
{
|
|
|
- if (InstanceIoc.Remove(SN, out _))
|
|
|
+ IDaq? daq;
|
|
|
+ if (InstanceIoc.Remove(ISn, out daq))
|
|
|
{
|
|
|
+ if (daq != null)
|
|
|
+ {
|
|
|
+ //直接释放
|
|
|
+ daq.Dispose();
|
|
|
+ }
|
|
|
return Break("Remove", true);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- return Break("Remove", false, $"{SN} 的实例移除失败");
|
|
|
+ return Break("Remove", false, $"{ISn} 的实例移除失败");
|
|
|
}
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- return Break("Remove", false, $"未找到 {SN} 的实例");
|
|
|
+ return Break("Remove", false, $"未找到 {ISn} 的实例");
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
@@ -672,43 +676,32 @@ namespace YSAI.DaqManage
|
|
|
return Break("Remove", false, ex.Message);
|
|
|
}
|
|
|
}
|
|
|
- /// <summary>
|
|
|
- /// 移除实例
|
|
|
- /// </summary>
|
|
|
- /// <param name="SN">实例的唯一标识符</param>
|
|
|
- /// <returns>统一出参</returns>
|
|
|
- public Task<OperateResult> RemoveAsync(string SN)
|
|
|
- {
|
|
|
- return Task.Run(() => Remove(SN));
|
|
|
- }
|
|
|
- /// <summary>
|
|
|
- /// 读取
|
|
|
- /// </summary>
|
|
|
- /// <param name="address">地址</param>
|
|
|
- /// <param name="SN">实例的唯一标识符</param>
|
|
|
- /// <returns>统一出参</returns>
|
|
|
- public Task<OperateResult> ReadAsync(Address address,string SN)
|
|
|
- {
|
|
|
- return Task.Run(() => Read(address, SN));
|
|
|
- }
|
|
|
- /// <summary>
|
|
|
- /// 读取
|
|
|
- /// </summary>
|
|
|
- /// <param name="address">地址</param>
|
|
|
- /// <param name="SN">实例的唯一标识符</param>
|
|
|
- /// <returns>统一出参</returns>
|
|
|
- public OperateResult Read(Address address, string SN)
|
|
|
+ public OperateResult Read(IFormFile FormFile, string ISn)
|
|
|
{
|
|
|
Depart("Read");
|
|
|
try
|
|
|
{
|
|
|
- if (InstanceIoc.ContainsKey(SN))
|
|
|
+ if (FormFile == null || FormFile.Length == 0)
|
|
|
{
|
|
|
- return InstanceIoc[SN].Read(address);
|
|
|
+ return Break("Read", false, "请选择地址信息文件");
|
|
|
+ }
|
|
|
+ if (InstanceIoc.ContainsKey(ISn))
|
|
|
+ {
|
|
|
+ //数据转换
|
|
|
+ StreamReader reader = new StreamReader(FormFile.OpenReadStream());
|
|
|
+ //Json内容
|
|
|
+ string jsonContent = reader.ReadToEnd();
|
|
|
+ //转换成指定对象
|
|
|
+ Address? address = JsonTool.StringToJsonEntity<Address>(jsonContent);
|
|
|
+ if (address != null)
|
|
|
+ {
|
|
|
+ return InstanceIoc[ISn].Read(address);
|
|
|
+ }
|
|
|
+ return Break("Read", false, $"文件数据内容错误");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- return Break("Read", false, $"未找到 {SN} 的实例");
|
|
|
+ return Break("Read", false, $"未找到 {ISn} 的实例");
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
@@ -716,36 +709,37 @@ namespace YSAI.DaqManage
|
|
|
return Break("Read", false, ex.Message);
|
|
|
}
|
|
|
}
|
|
|
- /// <summary>
|
|
|
- /// 写入
|
|
|
- /// </summary>
|
|
|
- /// <typeparam name="V">值类型</typeparam>
|
|
|
- /// <param name="Values">数据</param>
|
|
|
- /// <param name="SN">实例的唯一标识符</param>
|
|
|
- /// <returns>统一出参</returns>
|
|
|
- public Task<OperateResult> WriteAsync<V>(ConcurrentDictionary<string, V> Values, string SN)
|
|
|
+ public OperateResult Read(Address address, string ISn)
|
|
|
{
|
|
|
- return Task.Run(() => Write(Values, SN));
|
|
|
+ Depart("Read");
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (InstanceIoc.ContainsKey(ISn))
|
|
|
+ {
|
|
|
+ return InstanceIoc[ISn].Read(address);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return Break("Read", false, $"未找到 {ISn} 的实例");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ return Break("Read", false, ex.Message);
|
|
|
+ }
|
|
|
}
|
|
|
- /// <summary>
|
|
|
- /// 写入
|
|
|
- /// </summary>
|
|
|
- /// <typeparam name="V">值类型</typeparam>
|
|
|
- /// <param name="Values">数据</param>
|
|
|
- /// <param name="SN">实例的唯一标识符</param>
|
|
|
- /// <returns>统一出参</returns>
|
|
|
- public OperateResult Write<V>(ConcurrentDictionary<string, V> Values, string SN)
|
|
|
+ public OperateResult Write<V>(ConcurrentDictionary<string, V> Values, string ISn)
|
|
|
{
|
|
|
Depart("Write");
|
|
|
try
|
|
|
{
|
|
|
- if (InstanceIoc.ContainsKey(SN))
|
|
|
+ if (InstanceIoc.ContainsKey(ISn))
|
|
|
{
|
|
|
- return InstanceIoc[SN].Write(Values);
|
|
|
+ return InstanceIoc[ISn].Write(Values);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- return Break("Write", false, $"未找到 {SN} 的实例");
|
|
|
+ return Break("Write", false, $"未找到 {ISn} 的实例");
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
@@ -753,24 +747,32 @@ namespace YSAI.DaqManage
|
|
|
return Break("Write", false, ex.Message);
|
|
|
}
|
|
|
}
|
|
|
- /// <summary>
|
|
|
- /// 订阅
|
|
|
- /// </summary>
|
|
|
- /// <param name="address">地址</param>
|
|
|
- /// <param name="SN">实例的唯一标识符</param>
|
|
|
- /// <returns>统一出参</returns>
|
|
|
- public OperateResult Subscribe(Address address, string SN)
|
|
|
+ public OperateResult Subscribe(IFormFile FormFile, string ISn)
|
|
|
{
|
|
|
Depart("Subscribe");
|
|
|
try
|
|
|
{
|
|
|
- if (InstanceIoc.ContainsKey(SN))
|
|
|
+ if (FormFile == null || FormFile.Length == 0)
|
|
|
{
|
|
|
- return InstanceIoc[SN].Subscribe(address);
|
|
|
+ return Break("Subscribe", false, "请选择地址信息文件");
|
|
|
+ }
|
|
|
+ if (InstanceIoc.ContainsKey(ISn))
|
|
|
+ {
|
|
|
+ //数据转换
|
|
|
+ StreamReader reader = new StreamReader(FormFile.OpenReadStream());
|
|
|
+ //Json内容
|
|
|
+ string jsonContent = reader.ReadToEnd();
|
|
|
+ //转换成指定对象
|
|
|
+ Address? address = JsonTool.StringToJsonEntity<Address>(jsonContent);
|
|
|
+ if (address != null)
|
|
|
+ {
|
|
|
+ return InstanceIoc[ISn].Subscribe(address);
|
|
|
+ }
|
|
|
+ return Break("Subscribe", false, $"文件数据内容错误");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- return Break("Subscribe", false, $"未找到 {SN} 的实例");
|
|
|
+ return Break("Subscribe", false, $"未找到 {ISn} 的实例");
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
@@ -778,34 +780,51 @@ namespace YSAI.DaqManage
|
|
|
return Break("Subscribe", false, ex.Message);
|
|
|
}
|
|
|
}
|
|
|
- /// <summary>
|
|
|
- /// 订阅
|
|
|
- /// </summary>
|
|
|
- /// <param name="address">地址</param>
|
|
|
- /// <param name="SN">实例的唯一标识符</param>
|
|
|
- /// <returns>统一出参</returns>
|
|
|
- public Task<OperateResult> SubscribeAsync(Address address, string SN)
|
|
|
+ public OperateResult Subscribe(Address address, string ISn)
|
|
|
{
|
|
|
- return Task.Run(() => Subscribe(address, SN));
|
|
|
+ Depart("Subscribe");
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (InstanceIoc.ContainsKey(ISn))
|
|
|
+ {
|
|
|
+ return InstanceIoc[ISn].Subscribe(address);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return Break("Subscribe", false, $"未找到 {ISn} 的实例");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ return Break("Subscribe", false, ex.Message);
|
|
|
+ }
|
|
|
}
|
|
|
- /// <summary>
|
|
|
- /// 取消订阅
|
|
|
- /// </summary>
|
|
|
- /// <param name="address">地址</param>
|
|
|
- /// <param name="SN">实例的唯一标识符</param>
|
|
|
- /// <returns>统一出参</returns>
|
|
|
- public OperateResult UnSubscribe(Address address, string SN)
|
|
|
+ public OperateResult UnSubscribe(IFormFile FormFile, string ISn)
|
|
|
{
|
|
|
Depart("UnSubscribe");
|
|
|
try
|
|
|
{
|
|
|
- if (InstanceIoc.ContainsKey(SN))
|
|
|
+ if (FormFile == null || FormFile.Length == 0)
|
|
|
+ {
|
|
|
+ return Break("UnSubscribe", false, "请选择地址信息文件");
|
|
|
+ }
|
|
|
+ if (InstanceIoc.ContainsKey(ISn))
|
|
|
{
|
|
|
- return InstanceIoc[SN].UnSubscribe(address);
|
|
|
+ //数据转换
|
|
|
+ StreamReader reader = new StreamReader(FormFile.OpenReadStream());
|
|
|
+ //Json内容
|
|
|
+ string jsonContent = reader.ReadToEnd();
|
|
|
+ //转换成指定对象
|
|
|
+ Address? address = JsonTool.StringToJsonEntity<Address>(jsonContent);
|
|
|
+ if (address != null)
|
|
|
+ {
|
|
|
+ return InstanceIoc[ISn].UnSubscribe(address);
|
|
|
+ }
|
|
|
+ return Break("UnSubscribe", false, $"文件数据内容错误");
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- return Break("UnSubscribe", false, $"未找到 {SN} 的实例");
|
|
|
+ return Break("UnSubscribe", false, $"未找到 {ISn} 的实例");
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
@@ -813,43 +832,37 @@ namespace YSAI.DaqManage
|
|
|
return Break("UnSubscribe", false, ex.Message);
|
|
|
}
|
|
|
}
|
|
|
- /// <summary>
|
|
|
- /// 取消订阅
|
|
|
- /// </summary>
|
|
|
- /// <param name="address">地址</param>
|
|
|
- /// <param name="SN">实例的唯一标识符</param>
|
|
|
- /// <returns>统一出参</returns>
|
|
|
- public Task<OperateResult> UnSubscribeAsync(Address address, string SN)
|
|
|
- {
|
|
|
- return Task.Run(() => UnSubscribe(address, SN));
|
|
|
- }
|
|
|
-
|
|
|
- /// <summary>
|
|
|
- /// 打开
|
|
|
- /// </summary>
|
|
|
- /// <param name="SN">实例的唯一标识符</param>
|
|
|
- /// <returns>统一出参</returns>
|
|
|
- public Task<OperateResult> OnAsync(string SN)
|
|
|
+ public OperateResult UnSubscribe(Address address, string ISn)
|
|
|
{
|
|
|
- return Task.Run(() => On(SN));
|
|
|
+ Depart("UnSubscribe");
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (InstanceIoc.ContainsKey(ISn))
|
|
|
+ {
|
|
|
+ return InstanceIoc[ISn].UnSubscribe(address);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return Break("UnSubscribe", false, $"未找到 {ISn} 的实例");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ return Break("UnSubscribe", false, ex.Message);
|
|
|
+ }
|
|
|
}
|
|
|
- /// <summary>
|
|
|
- /// 打开
|
|
|
- /// </summary>
|
|
|
- /// <param name="SN">实例的唯一标识符</param>
|
|
|
- /// <returns>统一出参</returns>
|
|
|
- public OperateResult On(string SN)
|
|
|
+ public OperateResult On(string ISn)
|
|
|
{
|
|
|
Depart("On");
|
|
|
try
|
|
|
{
|
|
|
- if (InstanceIoc.ContainsKey(SN))
|
|
|
+ if (InstanceIoc.ContainsKey(ISn))
|
|
|
{
|
|
|
- return InstanceIoc[SN].On();
|
|
|
+ return InstanceIoc[ISn].On();
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- return Break("On", false, $"未找到 {SN} 的实例");
|
|
|
+ return Break("On", false, $"未找到 {ISn} 的实例");
|
|
|
}
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
@@ -857,135 +870,183 @@ namespace YSAI.DaqManage
|
|
|
return Break("On", false, ex.Message);
|
|
|
}
|
|
|
}
|
|
|
- /// <summary>
|
|
|
- /// 打开所有
|
|
|
- /// </summary>
|
|
|
- /// <param name="SN">实例的唯一标识符</param>
|
|
|
- /// <returns>统一出参</returns>
|
|
|
- public Task<OperateResult> OnAllAsync()
|
|
|
+ public OperateResult Off(string ISn)
|
|
|
+ {
|
|
|
+ Depart("Off");
|
|
|
+ try
|
|
|
+ {
|
|
|
+ if (InstanceIoc.ContainsKey(ISn))
|
|
|
+ {
|
|
|
+ return InstanceIoc[ISn].Off();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return Break("Off", false, $"未找到 {ISn} 的实例");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ return Break("Off", false, ex.Message);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ public OperateResult Read(string AddressName, string ISn)
|
|
|
{
|
|
|
- return Task.Run(() => OnAll());
|
|
|
+ Address address = new Address() { AddressArray = new List<AddressDetails> { new AddressDetails { AddressName = AddressName } } };
|
|
|
+ return InstanceIoc[ISn].Read(address);
|
|
|
}
|
|
|
- /// <summary>
|
|
|
- /// 打开所有
|
|
|
- /// </summary>
|
|
|
- /// <param name="SN">实例的唯一标识符</param>
|
|
|
- /// <returns>统一出参</returns>
|
|
|
- public OperateResult OnAll()
|
|
|
+ public OperateResult Write(string AddressName, string Value, DataType DaType, string ISn)
|
|
|
{
|
|
|
- Depart("OnAll");
|
|
|
+ ConcurrentDictionary<string, object> pairs = new ConcurrentDictionary<string, object>();
|
|
|
try
|
|
|
{
|
|
|
- if (InstanceIoc != null && InstanceIoc.Count > 0)
|
|
|
+ switch (DaType)
|
|
|
{
|
|
|
- List<string> FailMessage = new List<string>();
|
|
|
- foreach (var item in InstanceIoc)
|
|
|
- {
|
|
|
- OperateResult operateResult = item.Value.On();
|
|
|
- if (!operateResult.State)
|
|
|
- {
|
|
|
- FailMessage.Add(operateResult.Message);
|
|
|
- }
|
|
|
- }
|
|
|
- if (FailMessage.Count > 0)
|
|
|
+ case DataType.String:
|
|
|
+ pairs.TryAdd(AddressName, Value);
|
|
|
+ break;
|
|
|
+ case DataType.Bool:
|
|
|
+ pairs.TryAdd(AddressName, bool.Parse(Value));
|
|
|
+ break;
|
|
|
+ case DataType.Float:
|
|
|
+ pairs.TryAdd(AddressName, float.Parse(Value));
|
|
|
+ break;
|
|
|
+ case DataType.Int:
|
|
|
+ pairs.TryAdd(AddressName, int.Parse(Value));
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ return Break("Write", false, $"目前只支持{DataType.String}、{DataType.Bool}、{DataType.Float}、{DataType.Int}");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ return Break("Write", false, $"数据类型转换异常:{ex.Message}");
|
|
|
+ }
|
|
|
+ return Write(pairs, ISn);
|
|
|
+ }
|
|
|
+ public OperateResult SettingLib(List<IFormFile> FormFiles)
|
|
|
+ {
|
|
|
+ Depart("SettingLib");
|
|
|
+ try
|
|
|
+ {
|
|
|
+ List<string> FailMessage=new List<string>();
|
|
|
+ FormFiles.ForEach(file =>
|
|
|
+ {
|
|
|
+ var LibName = file.FileName;
|
|
|
+
|
|
|
+ string path = Path.Combine(basics.LibFolder, LibName);
|
|
|
+
|
|
|
+ if (!System.IO.File.Exists(path))
|
|
|
{
|
|
|
- return Break("OnAll", false, $"存在{FailMessage.Count}个异常信息,请查看RData", FailMessage, ResultType.All);
|
|
|
+ WriteFile(file, path);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- return Break("OnAll", true);
|
|
|
+ FailMessage.Add($"{LibName} 已存在");
|
|
|
}
|
|
|
- }
|
|
|
- else
|
|
|
+ });
|
|
|
+ if (FailMessage.Count > 0)
|
|
|
{
|
|
|
- return Break("OnAll", false, "实例为空");
|
|
|
+ return Break("SettingLib", false, $"存在{FailMessage.Count}个失败信息",FailMessage,ResultType.Json);
|
|
|
}
|
|
|
+ return Break("SettingLib", true);
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
- return Break("OnAll", false, ex.Message);
|
|
|
+ return Break("SettingLib", false, ex.Message);
|
|
|
}
|
|
|
}
|
|
|
- /// <summary>
|
|
|
- /// 关闭
|
|
|
- /// </summary>
|
|
|
- /// <param name="SN">实例的唯一标识符</param>
|
|
|
- /// <returns>统一出参</returns>
|
|
|
- public Task<OperateResult> OffAsync(string SN)
|
|
|
- {
|
|
|
- return Task.Run(() => Off(SN));
|
|
|
- }
|
|
|
- /// <summary>
|
|
|
- /// 关闭
|
|
|
- /// </summary>
|
|
|
- /// <param name="SN">实例的唯一标识符</param>
|
|
|
- /// <returns>统一出参</returns>
|
|
|
- public OperateResult Off(string SN)
|
|
|
+ public OperateResult DeleteLib(List<string> LibNames)
|
|
|
{
|
|
|
- Depart("Off");
|
|
|
+ Depart("DeleteLib");
|
|
|
try
|
|
|
{
|
|
|
- if (InstanceIoc.ContainsKey(SN))
|
|
|
+ List<string> FailMessage = new List<string>();
|
|
|
+ foreach (string LibName in LibNames)
|
|
|
{
|
|
|
- return InstanceIoc[SN].Off();
|
|
|
+ string path = Path.Combine(basics.LibFolder, LibName);
|
|
|
+
|
|
|
+ if (System.IO.File.Exists(path))
|
|
|
+ {
|
|
|
+ System.IO.File.Delete(path);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ FailMessage.Add($"{LibName} 不存在");
|
|
|
+ }
|
|
|
}
|
|
|
- else
|
|
|
+ if (FailMessage.Count > 0)
|
|
|
{
|
|
|
- return Break("Off", false, $"未找到 {SN} 的实例");
|
|
|
+ return Break("DeleteLib", false, $"存在{FailMessage.Count}个失败信息", FailMessage, ResultType.Json);
|
|
|
}
|
|
|
+ return Break("DeleteLib", true);
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
- return Break("Off", false, ex.Message);
|
|
|
+ return Break("DeleteLib", false, ex.Message);
|
|
|
}
|
|
|
}
|
|
|
- /// <summary>
|
|
|
- /// 关闭所有
|
|
|
- /// </summary>
|
|
|
- /// <param name="SN">实例的唯一标识符</param>
|
|
|
- /// <returns>统一出参</returns>
|
|
|
- public Task<OperateResult> OffAllAsync()
|
|
|
- {
|
|
|
- return Task.Run(() => OffAll());
|
|
|
- }
|
|
|
- /// <summary>
|
|
|
- /// 关闭所有
|
|
|
- /// </summary>
|
|
|
- /// <param name="SN">实例的唯一标识符</param>
|
|
|
- /// <returns>统一出参</returns>
|
|
|
- public OperateResult OffAll()
|
|
|
+ public OperateResult SettingLibConfig(List<IFormFile> FormFiles)
|
|
|
{
|
|
|
- Depart("OffAll");
|
|
|
+ Depart("SettingLibConfig");
|
|
|
try
|
|
|
{
|
|
|
- if (InstanceIoc != null && InstanceIoc.Count > 0)
|
|
|
+ List<string> FailMessage = new List<string>();
|
|
|
+ FormFiles.ForEach(file =>
|
|
|
{
|
|
|
- List<string> FailMessage = new List<string>();
|
|
|
- foreach (var item in InstanceIoc)
|
|
|
+ var configName = file.FileName;
|
|
|
+
|
|
|
+ string path = Path.Combine(basics.LibConfigFolder, configName);
|
|
|
+
|
|
|
+ if (!System.IO.File.Exists(path))
|
|
|
{
|
|
|
- OperateResult operateResult = item.Value.Off();
|
|
|
- if (!operateResult.State)
|
|
|
- {
|
|
|
- FailMessage.Add(operateResult.Message);
|
|
|
- }
|
|
|
+ WriteFile(file, path);
|
|
|
}
|
|
|
- if (FailMessage.Count > 0)
|
|
|
+ else
|
|
|
{
|
|
|
- return Break("OffAll", false, $"存在{FailMessage.Count}个异常信息,请查看RData", FailMessage, ResultType.All);
|
|
|
+ FailMessage.Add($"{configName} 已存在,请执行修改库配置文件");
|
|
|
+ }
|
|
|
+ });
|
|
|
+ if (FailMessage.Count > 0)
|
|
|
+ {
|
|
|
+ return Break("SettingLibConfig", false, $"存在{FailMessage.Count}个失败信息", FailMessage, ResultType.Json);
|
|
|
+ }
|
|
|
+ return Break("SettingLibConfig", true);
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ return Break("SettingLibConfig", false, ex.Message);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ public OperateResult UpdateLibConfig(List<IFormFile> FormFiles)
|
|
|
+ {
|
|
|
+ Depart("UpdateLibConfig");
|
|
|
+ try
|
|
|
+ {
|
|
|
+ List<string> FailMessage = new List<string>();
|
|
|
+ FormFiles.ForEach(file =>
|
|
|
+ {
|
|
|
+
|
|
|
+ string path = Path.Combine(basics.LibConfigFolder, file.FileName);
|
|
|
+
|
|
|
+ if (!System.IO.File.Exists(path))
|
|
|
+ {
|
|
|
+ WriteFile(file, path);
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- return Break("OffAll", true);
|
|
|
+ System.IO.File.Delete(path);
|
|
|
+ WriteFile(file, path);
|
|
|
}
|
|
|
- }
|
|
|
- else
|
|
|
+ });
|
|
|
+ if (FailMessage.Count > 0)
|
|
|
{
|
|
|
- return Break("OffAll", false, "实例为空");
|
|
|
+ return Break("UpdateLibConfig", false, $"存在{FailMessage.Count}个失败信息", FailMessage, ResultType.Json);
|
|
|
}
|
|
|
+ return Break("UpdateLibConfig", true);
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
- return Break("OffAll", false, ex.Message);
|
|
|
+ return Break("UpdateLibConfig", false, ex.Message);
|
|
|
}
|
|
|
}
|
|
|
}
|