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.
166 lines
4.6 KiB
166 lines
4.6 KiB
1 month ago
|
# 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
|
||
|
/// <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 版本初始化逻辑
|
||
|
|
||
|
```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
|
||
|
/// <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 版本
|
||
|
```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 的动态类型问题
|