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