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