# DirConvert 方法实现总结 ## 概述 `DirConvert` 方法对应 JavaScript 版本中的 `_dirConvert` 方法,用于将日志的原始方向值转换为客户端模型特定的方向值。 ## JavaScript 版本实现 ```javascript _dirConvert: function (log) { var layerDir = this._layerDir[log.layer]; if (layerDir) return layerDir[log.dir]; return 0; } ``` ## C# 版本实现 ```csharp /// /// 方向转换 - 对应JavaScript的_dirConvert方法 /// /// 日志对象 /// 转换后的方向值 public int DirConvert(LTELog log) { // 获取当前层的方向配置 if (_layerDir.TryGetValue(log.Layer, out var layerDir)) { // 根据日志的原始方向获取转换后的方向 if (layerDir.TryGetValue(log.Direction.ToString(), out var convertedDir)) { return convertedDir; } } return 0; // 默认返回0(DIR_NONE) } ``` ## 层方向配置初始化 ### JavaScript 版本初始化逻辑 ```javascript // 为每个模型初始化层方向配置 for (var c in modelConfig) { var model = modelConfig[c]; model.layerDir = {}; for (var i in layerConfig) { model.layerDir[i] = { 'UL': DIR_UL, 'DL': DIR_DL, 'FROM': DIR_DL, 'TO': DIR_UL, '-': DIR_NONE, }; } } // 特殊模型配置 for (var i in layerConfig) { if (i !== 'IMS' && i !== 'CX' && i !== 'RX' && ...) { modelConfig.MME.layerDir[i].FROM = DIR_UL; modelConfig.MME.layerDir[i].TO = DIR_DL; } modelConfig.IMS.layerDir[i].FROM = DIR_UL; modelConfig.IMS.layerDir[i].TO = DIR_DL; } ``` ### C# 版本初始化逻辑 ```csharp /// /// 初始化层方向配置 - 对应JavaScript版本的层方向配置初始化 /// /// 模型名称 private void InitializeLayerDirectionConfig(string? model) { // 获取层配置 var layerConfig = _lteLogs.GetLayerConfig(); // 为每个层初始化默认方向配置 foreach (var layer in layerConfig.Keys) { if (!_layerDir.ContainsKey(layer)) { _layerDir[layer] = new Dictionary { { "UL", LogsManager.DIR_UL }, { "DL", LogsManager.DIR_DL }, { "FROM", LogsManager.DIR_DL }, { "TO", LogsManager.DIR_UL }, { "-", LogsManager.DIR_NONE } }; } } // 根据模型设置特殊的方向配置 switch (model?.ToUpper()) { case "MME": // MME 模型特殊配置 foreach (var layer in layerConfig.Keys) { if (layer != "IMS" && layer != "CX" && layer != "RX" && ...) { if (_layerDir.ContainsKey(layer)) { _layerDir[layer]["FROM"] = LogsManager.DIR_UL; _layerDir[layer]["TO"] = LogsManager.DIR_DL; } } } break; // 其他模型配置... } } ``` ## 方向常量定义 ### JavaScript 版本 ```javascript const DIR_NONE = 0; const DIR_UL = 1; const DIR_DL = 2; const DIR_FROM = 3; const DIR_TO = 4; ``` ### C# 版本 ```csharp public const int DIR_NONE = 0; public const int DIR_UL = 1; public const int DIR_DL = 2; public const int DIR_FROM = 3; public const int DIR_TO = 4; ``` ## 工作原理 1. **获取层配置**: 根据日志的层名称从 `_layerDir` 中获取该层的方向配置 2. **方向转换**: 根据日志的原始方向值(如 "UL", "DL", "FROM", "TO", "-")查找对应的转换后方向值 3. **默认值**: 如果找不到对应的配置,返回 0(DIR_NONE) ## 使用场景 - **日志解析**: 在解析日志时,将原始方向值转换为客户端模型特定的方向值 - **显示过滤**: 根据转换后的方向值进行日志显示和过滤 - **模型适配**: 不同模型对同一层可能有不同的方向理解 ## 测试建议 1. **基本功能测试**: 测试各种方向值的转换是否正确 2. **模型特定测试**: 测试不同模型下的方向转换逻辑 3. **边界情况测试**: 测试不存在的层或方向值 4. **一致性测试**: 确保与 JavaScript 版本的行为一致 ## 注意事项 1. **初始化时机**: 层方向配置在 `SetModel` 方法中初始化 2. **模型依赖**: 不同模型有不同的层方向配置 3. **默认行为**: 未找到配置时返回 DIR_NONE 4. **类型安全**: C# 版本使用强类型,避免了 JavaScript 的动态类型问题