2013-10-23 48 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