Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在哪里处理我的包?_C#_Networking_Packet_Multiplayer_Payload - Fatal编程技术网

C# 在哪里处理我的包?

C# 在哪里处理我的包?,c#,networking,packet,multiplayer,payload,C#,Networking,Packet,Multiplayer,Payload,如果您正在编写一个网络流量很大的大型程序,我在哪里可以最好地处理不同的数据包?我的数据包包含一个连接到大枚举的数据包ID。例如,数据包LOGIN_AUTH是数据包ID 23 我怎样才能最好地分离这些数据包的处理 用所有的数据包ID做一个巨大的交换语句 为每个包ID创建一个包类和一个扩展类 我正在用C#编写我的应用程序,但问题更一般。假设您的对象有一个定义包类型的int,使用枚举命名这些整数并将处理程序存储在字典中很简单,如下所示: public enum PackageType {

如果您正在编写一个网络流量很大的大型程序,我在哪里可以最好地处理不同的数据包?我的数据包包含一个连接到大枚举的数据包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);
}

他可能希望根据枚举值识别消息。只有一种类型包含简单网络请求等的消息标识符的属性是有意义的。myPacket到底是什么?我该如何在IDictionary中插入一个新的数据包?@ByteBlast,你是对的-我已经修改了我的答案。巴萨,看看我修改过的答案。嗯。。。对不起,我完全迷路了。我从套接字接收数据,带有ID和有效负载(字符串)。假设类型为LOGIN\u AUTH。我如何处理该数据包,以及示例中的逻辑如何访问我的有效负载?对不起,我真的不明白。我来自Java,所以我从来没有使用过这些操作、委托、类型等…看到了吗