|
|
@@ -17,6 +17,7 @@ using YSAI.Log;
|
|
|
using YSAI.Unility;
|
|
|
using static YSAI.Core.reflection.ReflectionData.Basics.DllData.NamespaceData.ClassData;
|
|
|
using static YSAI.Core.reflection.ReflectionData.Basics.DllData.NamespaceData;
|
|
|
+using YSAI.Core.@interface.unify;
|
|
|
|
|
|
namespace YSAI.Core.data
|
|
|
{
|
|
|
@@ -25,27 +26,38 @@ namespace YSAI.Core.data
|
|
|
/// </summary>
|
|
|
public class AddressHandler
|
|
|
{
|
|
|
+ /// <summary>
|
|
|
+ /// 转发失败数据的日志输出文件
|
|
|
+ /// </summary>
|
|
|
+ private readonly static string FailDataLog = "FailData.log";
|
|
|
+ /// <summary>
|
|
|
+ /// 处理异常日志输出文件
|
|
|
+ /// </summary>
|
|
|
+ private readonly static string ExecuteDisposeLog = "ExecuteDispose.log";
|
|
|
+ /// <summary>
|
|
|
+ /// 解析异常日志输出文件
|
|
|
+ /// </summary>
|
|
|
+ private readonly static string ParseLog = "Parse.log";
|
|
|
+
|
|
|
/// <summary>
|
|
|
/// 反射操作
|
|
|
/// </summary>
|
|
|
- public readonly static ReflectionOperate reflectionOperate = ReflectionOperate.Instance();
|
|
|
+ private readonly static ReflectionOperate reflectionOperate = ReflectionOperate.Instance();
|
|
|
|
|
|
/// <summary>
|
|
|
/// 动态对象,用于转发失败存入本地记录
|
|
|
/// </summary>
|
|
|
- public static dynamic DynamicObj = new ExpandoObject();
|
|
|
+ private static dynamic DynamicObj = new ExpandoObject();
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 执行数据解析
|
|
|
+ /// 执行数据处理
|
|
|
/// 收到的底层数据,调用此方法,直接返回
|
|
|
/// </summary>
|
|
|
/// <param name="addressDetails">地址详情数据</param>
|
|
|
/// <param name="value">底层硬件返回的值</param>
|
|
|
/// <returns></returns>
|
|
|
- public static AddressValue? Execute(AddressDetails addressDetails, string value)
|
|
|
+ public static AddressValue? ExecuteDispose(AddressDetails addressDetails, string value)
|
|
|
{
|
|
|
- //日志文件名称
|
|
|
- string logName = "Handler.log";
|
|
|
try
|
|
|
{
|
|
|
//原始值
|
|
|
@@ -63,13 +75,21 @@ namespace YSAI.Core.data
|
|
|
addressValue.Quality = 1;
|
|
|
|
|
|
//转发
|
|
|
- Relay(addressValue);
|
|
|
+ OperateResult operateResult = Relay(PacketType.Message, addressValue);
|
|
|
+ if (!operateResult.State)
|
|
|
+ {
|
|
|
+ //当数据转发失败,就存到本地
|
|
|
+ DynamicObj.Value = addressValue.ToJson();
|
|
|
+ DynamicObj.State = operateResult.State;
|
|
|
+ DynamicObj.Exception = operateResult.Message;
|
|
|
+ LogHelper.FailData(DynamicObj.ToJson(), FailDataLog);
|
|
|
+ }
|
|
|
|
|
|
return addressValue;
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
- LogHelper.Error($"处理异常:{ex.Message}", logName);
|
|
|
+ LogHelper.Error($"执行数据处理异常:{ex.Message}", ExecuteDisposeLog);
|
|
|
}
|
|
|
return null;
|
|
|
}
|
|
|
@@ -86,9 +106,6 @@ namespace YSAI.Core.data
|
|
|
string? NewValue = value;
|
|
|
if (addressDetails.AddressParseParam != null)
|
|
|
{
|
|
|
- //日志文件名称
|
|
|
- string logName = "Parse.log";
|
|
|
-
|
|
|
try
|
|
|
{
|
|
|
switch (addressDetails.AddressParseParam.ParseType)
|
|
|
@@ -115,7 +132,7 @@ namespace YSAI.Core.data
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
- LogHelper.Error("解析异常:" + ex.ToString(), logName);
|
|
|
+ LogHelper.Error("解析异常:" + ex.ToString(), ParseLog);
|
|
|
}
|
|
|
}
|
|
|
return value;
|
|
|
@@ -124,13 +141,10 @@ namespace YSAI.Core.data
|
|
|
/// <summary>
|
|
|
/// 数据转发
|
|
|
/// </summary>
|
|
|
- /// <param name="addressValue">地址详情</param>
|
|
|
- /// <returns></returns>
|
|
|
- public static void Relay(AddressValue addressValue)
|
|
|
+ /// <param name="PType">转发类型</param>
|
|
|
+ /// <param name="Content">内容</param>
|
|
|
+ public static OperateResult Relay(PacketType PType, object Content)
|
|
|
{
|
|
|
- //日志文件名称
|
|
|
- string logName = "Relay.log";
|
|
|
-
|
|
|
try
|
|
|
{
|
|
|
//类的唯一标识符
|
|
|
@@ -138,42 +152,34 @@ namespace YSAI.Core.data
|
|
|
//方法的唯一标识符
|
|
|
string MethodSN = "[Produce]";
|
|
|
//执行转发方法
|
|
|
- OperateResult operateResult = reflectionOperate.ExecuteMethod($"{ClassSN}{MethodSN}", new object[] { PacketType.Message.ToString(), addressValue.ToJson().JsonFormatting() }) as OperateResult;
|
|
|
- //状态判断
|
|
|
- if (!operateResult.State)
|
|
|
- {
|
|
|
- DynamicObj.Value = addressValue;
|
|
|
- DynamicObj.State = operateResult.State;
|
|
|
- DynamicObj.Exception = operateResult.Message;
|
|
|
- LogHelper.Error(DynamicObj.ToJson(), logName);
|
|
|
- }
|
|
|
+ return reflectionOperate.ExecuteMethod($"{ClassSN}{MethodSN}", new object[] { PType.ToString(), Content.ToJson() }) as OperateResult;
|
|
|
}
|
|
|
catch (Exception ex)
|
|
|
{
|
|
|
- LogHelper.Error("转发异常:" + ex.ToString(), logName);
|
|
|
+ return new OperateResult(false, $"数据转发异常:{ex.Message}", 0.1);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
|
- /// 转发事件外部注册
|
|
|
+ /// 转发事件注册
|
|
|
/// </summary>
|
|
|
/// <returns></returns>
|
|
|
- public static bool RelayEventRegister(Action<object, object> action)
|
|
|
+ public static OperateResult RelayEventRegister(Action<object, object> action, bool Register = true)
|
|
|
{
|
|
|
- //类的唯一标识符
|
|
|
- string ClassSN = "YSAI.RelayManage.RelayManageOperate[Instance]";
|
|
|
- //事件的唯一标识符
|
|
|
- string EventSN = "[OnEvent]";
|
|
|
- //注册事件
|
|
|
- OperateResult operateResult = reflectionOperate.RegisterEvent($"{ClassSN}{EventSN}", true, P2: action);
|
|
|
- if (!operateResult.State)
|
|
|
+ try
|
|
|
{
|
|
|
- throw new Exception($"注册事件失败:{operateResult.Message}");
|
|
|
+ //类的唯一标识符
|
|
|
+ string ClassSN = "YSAI.RelayManage.RelayManageOperate[Instance]";
|
|
|
+ //事件的唯一标识符
|
|
|
+ string EventSN = "[OnEvent]";
|
|
|
+ //注册事件
|
|
|
+ return reflectionOperate.RegisterEvent($"{ClassSN}{EventSN}", Register, P2: action);
|
|
|
+ }
|
|
|
+ catch (Exception ex)
|
|
|
+ {
|
|
|
+ return new OperateResult(false, $"转发事件注册异常:{ex.Message}", 0.1);
|
|
|
}
|
|
|
- return operateResult.State;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
}
|