基于ESFramewok的 客户端和服务端通迅
     基本于ESFramework 的客户端和服务端终于可以通迅了!感谢ZHUWEI提供如此好的框架!ESFramework 功能强大,模拟完成端口,性能优越,这点可以见作者BLOG。通过ESFramework 不仅学习到了网络知识,更学习到了编程思想,基于接口的开发,编写框架的思想。
     相信有很多人和我一样对ESFramework 感兴趣。我愿意把我对ESFramework 的理解与收获与大家一起分享。下载代码 https://files.cnblogs.com/mediar/im20060412.rar
 
    MessageHeader需要应该实现,这一点我与作者持不同的意见,我认为消息头比较功能简单,比较固定。对性能影响不是很大,可以放在框架里实现。
    另外还要自己实现的是ContractHelper,PassiveHelper,SingleMessageDealer
(客户端接收到消息时,通知程序)
    服务端初使化时,关健要初使化一个分派器TcpStreamDispatcher。消息的到达是通过TcpStreamDispatcher通知用户的。TcpStreamDispatcher中的TcpClientsController
使用AgileTcp中的ITcpClientsController接口。整个初使化过程比较复杂,觉得应该还可以再简化一下。
   
 1
  ContractHelper mContractHelper = new Im.Contract.ContractHelper();
2
   EsbNetMessageHook mEsbNetMessageHook = new EsbNetMessageHook();
3
   mEsbNetMessageHook.ContractHelper = mContractHelper;
4![]()
5
   EsbRequestDealerFactory mEsbRequestDealerFactory = new EsbRequestDealerFactory();
6
   mEsbRequestDealerFactory.ContractHelper = mContractHelper;
7![]()
8
   mTcpStreamDispatcher = new TcpStreamDispatcher();
9
   mTcpStreamDispatcher.RequestDealerFactory = mEsbRequestDealerFactory;
10
   mTcpStreamDispatcher.ContractHelper = mContractHelper;
11
   mTcpStreamDispatcher.TcpClientsController = new AgileTcp();
12
   mTcpStreamDispatcher.RequestRecieved += new CbackRequestRecieved(mTcpStreamDispatcher_RequestRecieved);
13![]()
14![]()
15
   mTcpStreamDispatcher.NetMessageHook = mEsbNetMessageHook;
16![]()
17
   tcp = new AgileTcp();
18
   tcp.ContractHelper = mContractHelper;
19![]()
20
   tcp.BufferPool = new ESFramework.Network.Tcp.SimpleBufferPool();
21
   tcp.Dispatcher = mTcpStreamDispatcher;
22
   tcp.Initialize();
23![]()
24
   tcp.SomeOneConnected += new ESFramework.CbSimpleInt(tcp_SomeOneConnected);
25
   tcp.SomeOneDisConnected += new CallBackDisconnect(tcp_SomeOneDisConnected);
26![]()
  ContractHelper mContractHelper = new Im.Contract.ContractHelper();2
   EsbNetMessageHook mEsbNetMessageHook = new EsbNetMessageHook();3
   mEsbNetMessageHook.ContractHelper = mContractHelper;4

5
   EsbRequestDealerFactory mEsbRequestDealerFactory = new EsbRequestDealerFactory();6
   mEsbRequestDealerFactory.ContractHelper = mContractHelper;7

8
   mTcpStreamDispatcher = new TcpStreamDispatcher();9
   mTcpStreamDispatcher.RequestDealerFactory = mEsbRequestDealerFactory;10
   mTcpStreamDispatcher.ContractHelper = mContractHelper;11
   mTcpStreamDispatcher.TcpClientsController = new AgileTcp();12
   mTcpStreamDispatcher.RequestRecieved += new CbackRequestRecieved(mTcpStreamDispatcher_RequestRecieved);13

14

15
   mTcpStreamDispatcher.NetMessageHook = mEsbNetMessageHook;16

17
   tcp = new AgileTcp();18
   tcp.ContractHelper = mContractHelper;19

20
   tcp.BufferPool = new ESFramework.Network.Tcp.SimpleBufferPool();21
   tcp.Dispatcher = mTcpStreamDispatcher;22
   tcp.Initialize();23

24
   tcp.SomeOneConnected += new ESFramework.CbSimpleInt(tcp_SomeOneConnected);25
   tcp.SomeOneDisConnected += new CallBackDisconnect(tcp_SomeOneDisConnected);26

客户端关健要初使化一个能处理一班消息的接口。开始我的客户端接收不到数据,后来才发现,这接收消息并处理的功能需要自己去实现。客户端初使如下
  
 1
EsbNetMessageHook    netMessageHook   = new EsbNetMessageHook() ;
2
   netMessageHook.ContractHelper=new Im.Contract.ContractHelper();
3
   
4
            SingleMessageDealer   mSingleMessageDealer =new SingleMessageDealer();
5
            mSingleMessageDealer.eP2PMessageHandle+=new P2PMessageHandle(P2PMessage) ;
6
   
7
   serverProxy.TcpServerAgent =new TcpServerAgent();
8
   serverProxy.TcpServerAgent.TcpPassiveHelper=(ITcpPassiveHelper)(new Im.Contract.ContractHelper());
9
   serverProxy.TcpServerAgent.TcpPassive.NetMessageHook=netMessageHook;
10
   serverProxy.TcpServerAgent.PassiveHelper =new PassiveHelper();
11![]()
12
   serverProxy.TcpServerAgent.SingleMessageDealer=mSingleMessageDealer;
13
      serverProxy.TcpServerAgent.Initialize();
14![]()
15
   serverProxy.ContractHelper=new Im.Contract.ContractHelper();
16![]()
17
   serverProxy.TcpServerAgent.DataLacked+=new CbDataLacked(TcpServerAgent_DataLacked);
18![]()
EsbNetMessageHook    netMessageHook   = new EsbNetMessageHook() ;2
   netMessageHook.ContractHelper=new Im.Contract.ContractHelper();3
   4
            SingleMessageDealer   mSingleMessageDealer =new SingleMessageDealer();5
            mSingleMessageDealer.eP2PMessageHandle+=new P2PMessageHandle(P2PMessage) ;6
   7
   serverProxy.TcpServerAgent =new TcpServerAgent();8
   serverProxy.TcpServerAgent.TcpPassiveHelper=(ITcpPassiveHelper)(new Im.Contract.ContractHelper());9
   serverProxy.TcpServerAgent.TcpPassive.NetMessageHook=netMessageHook;10
   serverProxy.TcpServerAgent.PassiveHelper =new PassiveHelper();11

12
   serverProxy.TcpServerAgent.SingleMessageDealer=mSingleMessageDealer;13
      serverProxy.TcpServerAgent.Initialize();14

15
   serverProxy.ContractHelper=new Im.Contract.ContractHelper();16

17
   serverProxy.TcpServerAgent.DataLacked+=new CbDataLacked(TcpServerAgent_DataLacked);18

目前使用的功能只是基本的通迅功能,还有许多要续继学习,如P2P,插件等。欢迎大家和我一起学习交流.我的MSN:rr.m@163.com
                
            
        
浙公网安备 33010602011771号