在ESFramework 4.0 快速上手 -- 入门Demo,一个简单的IM系统(附源码)一文中,咱们介绍了使用ESFramework的Rapid引擎开发的winform聊天程序,本文咱们将在以前demo的基础上添加使用ESFramework.SL开发的Silverlight客户端。这样一来,不只Silverlight客户端之间能够相互通讯,Silverlight客户端还能够跟winform客户端进行通讯。若是不了解在Silverlight中如何使用ESFramework,能够先看看ESFramework 4.0 快速上手 -- 在Silverlight中使用ESFramework。html
Silverlight客户端一样实现了如下功能并有所加强:api
(1)客户端用户上下线时,通知其余在线用户。服务器
(2)当客户端与服务端网络断开时,进行自动重连,当网络恢复后,重连成功。网络
(3)全部在线用户(包括Winform客户端)之间能够进行文字聊天。工具
(4)消息同步调用。(演示了三种类型的同步调用)post
(5)重登录模式。当同名的用户登录时,会把前面的用户挤掉。spa
一.服务端code
服务端直接使用ESFramework 4.0 快速上手 -- 入门Demo,一个简单的IM系统(附源码)的实现,而且增长了服务器同步调用客户端的功能 -- 即服务端向某个在线客户端提交请求并返回客户端的回复信息。咱们利用了服务端UI的“工具”菜单里面“自定义功能”,当点击这个菜单时,将默认向在线用户列表中的第一个用户发送同步调用请求。如图中第一个在线用户是aa01,那么点击“自定义功能”后,就由aa01来处理服务端的同步调用。orm
服务端同步调用客户端由ICustomizeInfoController.QueryClient()方法来实现。 htm
二.客户端
1.客户端的MainPage类实现了ESFramework.SL.Application.Basic.IBasicBusinessHandler接口,以接收其余用户的上下线通知、被挤掉线通知、心跳超时通知等。
2.客户端的MainPage类还实现了ESFramework.SL.Application.CustomizeInfo.ICustomizeInfoBusinessHandler接口,以处理来自其它用户的聊天消息、来自服务端的同步调用、以及来自其它客户端的P2P同步调用等。
3.客户端的MainPage类还预约并处理了ESFramework.SL.Rapid.IRapidPassiveEngine的TcpPassiveEngine属性的与链接状态变化相关的事件,如链接断开、重连开始、重连成功/失败。
客户端启动登录后,显示的主界面MainPage以下:
当有其余用户登录时,会在“在线用户列表”中显示出来,点击选择用户ID,就能够与该用户聊天。UI右边上面是与所选择的用户的聊天历史记录,下面是发送消息的文本框。 从在线用户列表选择要对话的好友,而后在聊天输入框输入文本,最后点击“发送”按钮便可。程序经过ESFramework.SL.Application.CustomizeInfo.ICustomizeInfoOutter的Send方法发送消息给好友。
好友掉线时,好友的名称会从好友列表中消失,若是正在与该好友聊天,则右边的历史记录会清空,“发送”按钮也再也不可用。
若是咱们在另外一个地方再登录一个aa01(演示重登录),程序会先回调ESFramework.SL.Application.Basic.IBasicBusinessHandler的OnBeingPushedOut(),而后再触发TcpPassiveEngine的ConnectionInterrupted事件,通知当前的用户。
3、同步调用
这个demo里面演示了三种类型的同步调用:客户端与客户端之间的同步调用,客户端同步调用服务端,服务端同步调用客户端。
1.客户端同步调用服务端:这个在前一个Demo中演示过,在Sliverlight客户端中彻底使用同样的模式。
2. 服务端同步调用客户端:这个在第一部分已经介绍,而客户端是经过实现ICustomizeInfoBusinessHandler接口的HandleQueryFromServer方法来处理来自服务端的同步调用的:
3. 客户端同步调用客户端:调用是由ICustomizeInfoOutter接口的CommitP2PRequest方法来发出的,
目标客户端收到来自其余用户的同步调用请求后,会由ICustomizeInfoBusinessHandler接口的HandleP2PRequest方法来处理这个请求:
四. 两种类型的客户端公用同一服务端
基于ESFramework Rapid引擎开发的winform客户端和silverlight客户端能够公用同一个服务端,甚至之后,ESFramework还可能支持基于C++/Flash/Java的客户端。下图是本文的Demo启动后,silverlight客户端和winform客户端用户以前的通讯截图。
五.Demo源码下载
下载本文的Demo源码。注意,在运行基于Silverlight的客户端程序时,服务器上首先应该起到“Silverlight策略服务器”,能够从ESFramework 4.0 概述文末下载策略服务器。