2013-10-23 35 views
1

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

我怎样才能最好地分开处理这些数据包?

  • 做一个巨大的switch语句,其中包含所有Packet ID的内容?
  • 制作一个数据包类并为每个数据包ID创建一个扩展类?

我在C#中编写我的应用程序,但问题更一般。

+0

见http://stackoverflow.com/questions/1477471/design-pattern-for-handling-multiple-message-types –

回答

2

假设你的对象有一个定义封装类型为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); 
} 
+0

他可能希望为基于枚举值的消息。有意义的是,只有一种类型包含简单网络请求的消息标识的属性。 –

+0

什么是myPacket?我如何在IDictionary中插入新的数据包? – Basaa

+0

@ByteBlast,你是对的 - 我修改了我的答案。巴萨,看到我修改后的答案。 – lightbricko