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
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;
工作原理
- 获取层配置: 根据日志的层名称从
_layerDir
中获取该层的方向配置 - 方向转换: 根据日志的原始方向值(如 "UL", "DL", "FROM", "TO", "-")查找对应的转换后方向值
- 默认值: 如果找不到对应的配置,返回 0(DIR_NONE)
使用场景
- 日志解析: 在解析日志时,将原始方向值转换为客户端模型特定的方向值
- 显示过滤: 根据转换后的方向值进行日志显示和过滤
- 模型适配: 不同模型对同一层可能有不同的方向理解
测试建议
- 基本功能测试: 测试各种方向值的转换是否正确
- 模型特定测试: 测试不同模型下的方向转换逻辑
- 边界情况测试: 测试不存在的层或方向值
- 一致性测试: 确保与 JavaScript 版本的行为一致
注意事项
- 初始化时机: 层方向配置在
SetModel
方法中初始化 - 模型依赖: 不同模型有不同的层方向配置
- 默认行为: 未找到配置时返回 DIR_NONE
- 类型安全: C# 版本使用强类型,避免了 JavaScript 的动态类型问题