64 lines
2.4 KiB
C#
64 lines
2.4 KiB
C#
using JiShe.CollectBus.Common.Enums;
|
||
using JiShe.CollectBus.Common.Extensions;
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using System.Linq;
|
||
using System.Reflection;
|
||
using System.Text;
|
||
using System.Threading.Tasks;
|
||
|
||
namespace JiShe.CollectBus.Protocol.Contracts
|
||
{
|
||
public class ProtocolConstExtensions
|
||
{
|
||
/// <summary>
|
||
/// 自动获取 ProtocolConst 类中所有下行 Kafka 主题名称
|
||
/// (通过反射筛选 public const string 且字段名以 "EventName" 结尾的常量)
|
||
/// </summary>
|
||
public static List<string> GetAllTopicNamesByIssued(string serverTagName)
|
||
{
|
||
List<string> topics = typeof(ProtocolConst)
|
||
.GetFields(BindingFlags.Public | BindingFlags.Static)
|
||
.Where(f =>
|
||
f.IsLiteral &&
|
||
!f.IsInitOnly &&
|
||
f.FieldType == typeof(string) &&
|
||
f.Name.EndsWith("IssuedEventName")) // 通过命名规则过滤主题字段
|
||
//.Select(f => $"{serverTagName}.{(string)f.GetRawConstantValue()!}")
|
||
.Select(f => (string)f.GetRawConstantValue()!)
|
||
.ToList();
|
||
|
||
return topics;
|
||
}
|
||
|
||
/// <summary>
|
||
/// 自动获取 ProtocolConst 类中所有下行 Kafka 主题名称
|
||
/// (通过反射筛选 public const string 且字段名以 "EventName" 结尾的常量)
|
||
/// </summary>
|
||
public static List<string> GetAllTopicNamesByReceived(string serverTagName)
|
||
{
|
||
//固定的上报主题
|
||
var topicList = typeof(ProtocolConst)
|
||
.GetFields(BindingFlags.Public | BindingFlags.Static)
|
||
.Where(f =>
|
||
f.IsLiteral &&
|
||
!f.IsInitOnly &&
|
||
f.FieldType == typeof(string) &&
|
||
f.Name.EndsWith("ReceivedEventName")) // 通过命名规则过滤主题字段
|
||
.Select(f => (string)f.GetRawConstantValue()!)
|
||
.ToList();
|
||
|
||
//动态上报主题,需根据协议的AFN功能码动态获取
|
||
var afnList = EnumExtensions.ToNameValueDictionary<AFN>();
|
||
foreach (var item in afnList)
|
||
{
|
||
topicList.Add(string.Format(ProtocolConst.AFNTopicNameFormat, item.Value.ToString().PadLeft(2, '0')));
|
||
}
|
||
|
||
//return topicList.Select(f => $"{serverTagName}.{f}").ToList();
|
||
|
||
return topicList;
|
||
}
|
||
}
|
||
}
|