处理器 - Snet Docs

🛠️ Core 处理器 (Handlers)

命名空间: Snet.Core.handler | 源码: Snet.Core/handler/


BytesHandler — 字节解析处理器

继承: CoreUnify<BytesHandler, string>

将原始字节数组按 BytesModel 配置解析为结构化的 AddressValue

// 解析单个 AddressValue(同步)
public OperateResult Transform(AddressValue addressValue, bool isStringReverseByteWord = false)

// 批量解析字节数组(同步)
public OperateResult Transform(byte[] bytes, DateTime time,
    IEnumerable<BytesModel> transformParams, bool isStringReverseByteWord = false)

// 解析单个 AddressValue(异步)
public async Task<OperateResult> TransformAsync(AddressValue addressValue, bool isStringReverseByteWord = false, CancellationToken token = default)

// 批量解析字节数组(异步)
public async Task<OperateResult> TransformAsync(byte[] bytes, DateTime time,
    IEnumerable<BytesModel> transformParams, bool isStringReverseByteWord = false, CancellationToken token = default)

isStringReverseByteWordString 解包时是否按 16 位字反转字节(每 2 字节一组交换)。连接级配置——如欧姆龙 FINS 的字符串按字反转字节读取。默认 false

同步 Transform 重载与异步版本行为一致,包括空安全检查:当 AddressExtendParamOriginalValue 为 null 或空时返回错误 OperateResult


BytesTransformHandler — 字节序转换器

处理多字节数值在不同字节序(ABCD/BADC/CDAB/DCBA)之间的转换,涵盖所有基础类型。

读取方向 (Trans* — byte[] → 类型)

重载 返回类型
TransBool(byte[] buffer, int index) / TransBool(byte[] buffer, int index, int length) bool / bool[]
TransByte(byte[] buffer, int index) / TransByte(byte[] buffer, int index, int length) byte / byte[]
TransInt16(byte[] buffer, int index) / TransInt16(byte[] buffer, int index, int length) / TransInt16(byte[] buffer, int index, int row, int col) short / short[] / short[,]
TransUInt16TransInt32TransUInt32TransInt64TransUInt64TransSingleTransDouble 标量 (buffer, index)、数组 (buffer, index, length)、二维 (buffer, index, row, col) 重载
TransString(byte[] buffer, int index, int length, Encoding encoding) / TransString(byte[] buffer, Encoding encoding) string

写入方向 (TransByte — 类型 → byte[])

每种类型均有对应的 TransByte 重载:

public virtual byte[] TransByte(bool value)
public virtual byte[] TransByte(short value)
public virtual byte[] TransByte(int value)
public virtual byte[] TransByte(float value)
public virtual byte[] TransByte(double value)
public virtual byte[] TransByte(string value, Encoding encoding)
// ... 以及对应的数组版本 (bool[], short[], int[], float[], double[])

配置属性

属性 类型 默认值 说明
DataFormat DataFormat 字节序 (ABCD/BADC/CDAB/DCBA)
IsStringReverseByteWord bool false 字符串按字反转字节
var handler = new BytesTransformHandler(DataFormat.CDAB);
short value = handler.TransInt16(rawBytes, 0);       // 按CDAB序解析
byte[] bytes = handler.TransByte(12345);              // 按CDAB序编码

AddressHandler — 虚拟地址拦截器

ReadAsync 管道中,在实际 I/O 发生之前拦截虚拟地址。

// 对单个地址执行虚拟地址处理
public static AddressValue? ExecuteDispose(this AddressDetails addressDetails,
    object? value, string? message)

// 特殊释放处理
public static AddressValue? ExecuteSpecialDispose(this AddressDetails addressDetails,
    string? value, string? message)

// 关闭所有虚拟地址实例
public static void Shutdown()
public static async Task ShutdownAsync()

工作原理

ReadAsync(Address address)
  └── foreach (AddressDetails detail in address)
        ├── AddressType == Reality  → 真实I/O
        └── AddressType == Virtual* → ExecuteDispose() → 内存生成值

LanguageHandler — 语言解析器

静态全局语言管理,配合 ILanguage 接口和 MultilingualAttribute

// 根据关键字获取当前语言的键值
public static string? GetLanguageValue(this string key, LanguageModel? languageModel = null)
public static Task<string?> GetLanguageValueAsync(this string key, LanguageModel? languageModel = null, CancellationToken token = default)

// 获取/设置当前语言
public static LanguageType GetLanguage()
public static Task<LanguageType> GetLanguageAsync(CancellationToken token = default)

public static bool SetLanguage(this LanguageType language)
public static Task<bool> SetLanguageAsync(this LanguageType language, CancellationToken token = default)

// 使用自定义 LanguageModel 获取翻译
public static string? GetLanguageValue<T>(this T model, string key) where T : LanguageModel, new()
public static Task<string?> GetLanguageValueAsync<T>(this T model, string key, CancellationToken token = default) where T : LanguageModel, new()

// 语言变更事件 (全局)
public static event EventHandler<EventLanguageResult>? OnLanguageEvent;
public static event EventHandlerAsync<EventLanguageResult> OnLanguageEventAsync;
// 设置中文
LanguageType.zh.SetLanguage();

// 获取翻译值
string label = "connection.success".GetLanguageValue(); // → "连接成功"

ParamHandler — 参数反射生成器

通过反射将配置对象转为 UI 表单参数模型。

// 将任意对象转为 ParamModel UI 描述
public static OperateResult Get<T>(T obj, string name, string description,
    List<propertie>? properties = null)

读取 [Display][Unit][Verify] 等特性,自动生成包含控件类型、验证规则、默认值的 ParamModel

参见