天天看點

ESFramework網絡通信架構介紹之(3)――消息處理器和處理器工廠一。ESFramework網絡通信架構與消息處理器 

 無論是服務端還是用戶端,都需要對接收到的消息進行處理,在ESFramework網絡通信架構中,處理消息的元件稱為消息處理器,所有的消息處理器都實作了接口IDataDealer:

1     public interface IDataDealer

2     {        

3         NetMessage  DealRequestMessage(NetMessage reqMsg) ;        

4     }    

    從DealRequestMessage方法的簽名我們可以看到,将NetMessage的主體(是位元組流)解析為IContract對象是由消息處理器自己完成的。這也是很符合實際的,消息處理器一定能解析并處理它關心的消息,而架構和應用的其它部分不必關心。這裡小結一下,最開始我們把消息解析的任務從架構下放到了應用,這裡,我們又把這個任務繼續下放給了消息處理器。這樣,各個消息處理器隻用解析自己關心的消息了,在此基礎上,我們就可以把消息處理器做成插件(Addin)的形式,并實作插件的動态加載功能。

    現在我們來看看消息處理器插件(又稱“功能插件”) 

    /// <summary>

    /// IFunAddin 功能插件基礎接口。

    /// </summary>

    public interface IFunAddin :IAddin ,IDataDealer

    {

    }

     針對各種不同類型的消息(消息類型的不同展現為本條消息的Header中的ServiceKey不同),需要由不同的消息處理器來處理,管理/建立所有這些消息處理器的工廠,稱為處理器工廠IDataDealerFactory。

    public interface IDataDealerFactory

        IDataDealer CreateDealer(int requestType ,int serverTypeKey)  ;//serverTypeKey 比如城市代号        

    IDataDealerFactory根據消息的類型,建立對應的處理器。CreateDealer方法中的第二個參數serverTypeKey暫時可不予關心。

ESFramework網絡通信架構介紹之(3)――消息處理器和處理器工廠一。ESFramework網絡通信架構與消息處理器 
ESFramework網絡通信架構介紹之(3)――消息處理器和處理器工廠一。ESFramework網絡通信架構與消息處理器 

FunAddinDealerFactory

 1     public class FunAddinDealerFactory :IDataDealerFactory

 2     {

 3         private IAddinManagement addinManagement ;

 4 

 5         public FunAddinDealerFactory()

 6         {            

 7         }

 8 

 9         #region property

10         public IAddinManagement AddinManagement

11         {

12             set

13             {

14                 this.addinManagement = value ;

15             }

16         }

17         #endregion

18 

19         #region IDataDealerFactory 成員

20         public IDataDealer CreateDealer(int requestType, int serverTypeKey)

21         {

22             foreach(IAddin addin in this.addinManagement.AddinList)

23             {

24                 if((addin.ServiceKey == requestType) && (addin.Enabled))

25                 {

26                     return (IDataDealer)addin ;

27                 }

28             }

29 

30             return null;

31         }

32 

33         #endregion

34     }

     上面講述的是基于插件的處理器工廠,後面的文章中我們還會給出一個基于Tcp連接配接池的處理器工廠:)

    有時,應用經常有這樣的需要,對某種類型的消息或某個特定的消息進行攔截、截獲,然後對其進行某種變形(如壓縮、加密)等,這些功能将通過Hook機制實作,Hook機制到底是如何發生作用的,請繼續關注下文 

<a href="http://zhuweisky.cnblogs.com/archive/2006/03/13/349055.html">ESFramework網絡通信架構介紹之(4)―消息攔截器INetMessageHook</a>

版權聲明:本文為部落客原創文章,未經部落客允許不得轉載。

繼續閱讀