You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

4.6 KiB

DirConvert 方法实现总结

概述

DirConvert 方法对应 JavaScript 版本中的 _dirConvert 方法,用于将日志的原始方向值转换为客户端模型特定的方向值。

JavaScript 版本实现

_dirConvert: function (log) {
    var layerDir = this._layerDir[log.layer];
    if (layerDir)
        return layerDir[log.dir];
    return 0;
}

C# 版本实现

/// <summary>
/// 方向转换 - 对应JavaScript的_dirConvert方法
/// </summary>
/// <param name="log">日志对象</param>
/// <returns>转换后的方向值</returns>
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 版本初始化逻辑

// 为每个模型初始化层方向配置
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# 版本初始化逻辑

/// <summary>
/// 初始化层方向配置 - 对应JavaScript版本的层方向配置初始化
/// </summary>
/// <param name="model">模型名称</param>
private void InitializeLayerDirectionConfig(string? model)
{
    // 获取层配置
    var layerConfig = _lteLogs.GetLayerConfig();
    
    // 为每个层初始化默认方向配置
    foreach (var layer in layerConfig.Keys)
    {
        if (!_layerDir.ContainsKey(layer))
        {
            _layerDir[layer] = new Dictionary<string, int>
            {
                { "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 版本

const DIR_NONE = 0;
const DIR_UL = 1;
const DIR_DL = 2;
const DIR_FROM = 3;
const DIR_TO = 4;

C# 版本

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 的动态类型问题