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