基于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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

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

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

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