基于ESFramewok的 客户端和客户端通迅

          上篇介绍了客户端与服务端之间的通讯。这里介绍客户端与客户端之间的通迅(通过服务端中转)

  当客户端联接了上服务端,服务端会保存联接信息,并对当前用户进行管理。详见系列文章

  由于用户管理和TCP组件采用了乔接模式所以在初使化的时候稍微改动了一下。

 1        mTcpUserManager = new TcpUserManager();
 2            mTcpUserManager.Start();
 3            mTcpUserManager.TcpUserDisplayer=this.tcpUserDisplayer1;
 4        
 5//            mTcpUserManager.SomeOneConnected += new ESFramework.CbSimpleStr(mTcpUserManager_SomeOneConnected);
 6//            mTcpUserManager.SomeOneDisconnected += new CbForTcpUserDisconn(mTcpUserManager_SomeOneDisconnected);
 7
 8            mTcpUserManagerBridge = new TcpUserManagerBridge();
 9            mTcpUserManagerBridge.Tcp = mTcp;
10            mTcpUserManagerBridge.TcpUserManager = mTcpUserManager;
11            mTcpUserManagerBridge.ContractHelper = mContractHelper;
12            mTcpUserManagerBridge.BasicRequestDealer=new BasicRequestDealer();
13            mTcpUserManagerBridge.Initialize();
14
15            this.tcpUserDisplayer1.ServiceKeyNameMatcher = new ServiceKeyNameMatcher();

服务端增加了转发的功能 .

 1    if(msg.Header.DestUserID!="0000000000")
 2            {
 3                if (mTcpUserManager.IsUserOnLine(msg.Header.DestUserID))
 4                {
 5                    mTcp.SendData(mTcpUserManager.GetUserConnectID(msg.Header.DestUserID),msg);
 6
 7                    InstantMessageContract message = new InstantMessageContract(new ContractHelper());
 8
 9                    message.FillMyself(msg.Body, 0);
10
11                    DisplayChatMsg(string.Format("用户{0} 给 用户{1}发送了消息",msg.Header.UserID,msg.Header.DestUserID), message.MessageText);
12                }

13            }

 

 在服务端建了两个基本的组件,一个是处理登陆,一下是处理获取好友信息.它们必需注册到消息分派器处理工厂

1EsbRequestDealerFactory mEsbRequestDealerFactory = new EsbRequestDealerFactory();
2            mEsbRequestDealerFactory.ContractHelper = mContractHelper;
3            mEsbRequestDealerFactory.BasicRequestDealer=new BasicRequestDealer();
4            mEsbRequestDealerFactory.FriendRelationDealer=new FriendRelationDealer();

具体的组件中的代码比较多,有兴趣可以直接看代码.值得一提的是,在我把信息转换成二进制时我采用了二进制序列化.这也许并不好,其它的语言好象还不支持.net平台的序列化.有同事建义我用XML序列化,然后再转成二进制,也许这是个好办法,祝位可以自己思考吧.


  再说说客户端.客户端变化比较大,因为要和其它客户端交流,还有好友管理等。
思路是:
  1、首先输入用户名密码进行登陆,成功后打主UI
   当用户登陆成功后,我把一些可能用到的信息写到公共区.接收到信息后再把信息传给主UI.
  2、获取好友并显示。
   在主UI LOAD事件中完成.并且把好友添加到好友列表中
  3、双击其中的好友后,可对好友聊天。
  4、对接收到其它用户送过来的消息时,判断和其聊天的对话框是否已经存在,如果存在没有就让其显示,否则就新建一个并显示接收的信息。

 客户端代码比较多,但是又不是很难看懂,所以就不贴出来了.
 上一篇 基于ESFramewok的 客户端和服务端通迅 http://mediar.cnblogs.com/archive/2006/04/12/373143.html

   代码下载 https://files.cnblogs.com/mediar/im20060517.rar

posted @ 2006-05-17 18:07  瑞德船长  阅读(393)  评论(0编辑  收藏  举报