在哪里处理我的包裹

本文关键字:包裹 我的 处理 在哪里 | 更新日期: 2023-09-27 18:36:47

如果您正在编写一个具有大量网络流量的大型程序,那么在哪里可以最好地处理我的不同数据包?我的数据包包含一个连接到大枚举的数据包 ID。例如,数据包 LOGIN_AUTH 是数据包 ID 23。

如何最好地分离这些数据包的处理?

  • 制作一个巨大的开关声明,其中包含所有数据包 ID?
  • 创建一个数据包类并为每个数据包 ID 创建一个扩展类?

我正在用 C# 制作我的应用程序,但问题更笼统。

在哪里处理我的包裹

假设您的对象具有定义包类型的 int,那么使用枚举来命名这些整数并将处理程序存储在字典中很简单,如下所示:

public enum PackageType
{
    LOGIN_AUTH = 23,
    // More enum members here
}
class Package
{
    public int Id { get; set; }
    public PackageType Type { get { return (PackageType) Id; }}
}
class SomeClass
{
    IDictionary<PackageType, Action<Type>> _dictionaryPacketHandlers = new Dictionary<PackageType, Action<Type>>()
    {
        {PackageType.LOGIN_AUTH, package => { /* Logic here */ }},
        // More handlers here
    };
}

现在你可以像这样使用它:

public void SomeMethod(Package package)
{
    _dictionaryPacketHandlers[package.Type](package);
}