本文咱们将介绍在ESFramework 4.0 快速上手(08) -- 入门Demo,一个简单的IM系统(附源码)的基础上,增长文件传送的功能。若是不了解如何使用ESFramework提供的文件传送功能,能够先看看ESFramework 4.0 快速上手(13) -- 文件传送,如此简单一文的详细介绍。html
本Demo可演示如下与文件传送相关的特性:api
(1)发送方请求发送文件,接收方能够赞成或拒绝接收文件。框架
(2)文件传送的过程当中,收发的任何一方均可以经过事件了解文件传送的实时进度。函数
(3)文件传送的过程当中,收发的任何一方均可以中断文件的传送。工具
(4)文件传送的过程当中,收发的任何一方掉线,都将致使文件传送中断。post
(5)只要文件传送中断,收发方都会获得相应的事件通知。线程
(6)自动启用文件断点续传。code
(7)文件传送完成,收发方都会获得相应的事件通知。orm
一.服务端
服务端只须要用调用引擎RapidServerEngine的初始化方法的另一个重载就能够启用框架的文件传送功能:server
该重载方法多了一个IFileBusinessHandler(位于ESPlus.Application.FileTransfering.Server)参数,咱们直接传入框架提供ESPlus.Application.FileTransfering.Server.FileBusinessHandler实例便可。因为在本demo中,服务端即不会是文件发送方、也不会是文件接收方,因此服务端的初始化方法的IFileBusinessHandler参数只要不传入null,就表示服务端会支持客户端之间的文件传送功能。
若是咱们要作的是相似FTP的系统,那么这个参数就很重要了,IFileBusinessHandler的实现决定了服务端对客户端上传文件的相关策略。在相似FTP的系统中,咱们只要将服务端看作是一个普通的文件收发方,就像一个收发文件的客户端同样,就能够公用一样的文件传送流程了。
二.客户端
本Demo演示的主要是客户端之间的文件传送,因此客户端的逻辑稍微复杂一点,咱们分解说明以下。
1.初始化
客户端引擎RapidPassiveEngine的初始化也须要用另一个重载方法:
该重载方法也是多了一个IFileBusinessHandler(位于ESPlus.Application.FileTransfering.Client)参数,IFileBusinessHandler接口有两个方法:ReadyToAcceptFile方法的实现一般是询问当前用户是否赞成接收对方发送的文件;而OnResponseOfReceiver方法的实现一般是告诉发送方对方是否赞成了接收文件。Demo中的MainForm类实现了IFileBusinessHandler接口。
2.发送文件
在聊天窗口,当用户点击了左上角的发送文件按钮,并选择了要发送的文件后,程序就会经过IFileOutter接口的BeginSendFile方法来开启文件传送流程。
咱们能够经过SendingFileParas参数来控制文件数据包的发送策略。
BeginSendFile方法调用后,接收方将会经过上述的ReadyToAcceptFile方法获得通知,若是赞成接收,则发送方就会经过上述的OnResponseOfReceiver方法获得通知,且框架会自动在后台开启文件传送线程。
3.传输文件状态显示
当文件传送正式开始之后,咱们就须要了解当前文件传输的状态。本Demo直接使用了ESPlus提供的ESPlus.FileTransceiver.Widgets.FileTransferingViewer控件。咱们将这个控件从工具箱拖拽到聊天窗口右边的Panel上,而后将其传入IFileOutter的InitializeFileTransferingViewer方法进行初始化后,它就能正常工做了。本demo中,咱们在ChatForm类的构造函数中初始化该控件。
在运行时,咱们能够在该控件上显示的正在传送的文件的Item上点击“取消”按钮,以中断文件传输 -- 控件会自动将该动做传递给框架以自动取消,咱们在代码中不须要再作任何取消传送的处理。
4.文件传送事件处理
咱们在ChatForm类中预约了FileTransferingViewer的几个事件,来接收文件传送的相关事件通知,以在UI上显示告诉当前用户:文件传送开始、中断、完成、续传等。若是你的项目中不须要用到FileTransferingViewer,那么能够经过预约ESPlus.Application.FileTransfering.IFileController接口暴露的FileSendingEvents和FileReceivingEvents来跟踪每一个文件传送项目的状态。
5. 关闭聊天窗口的时候,中断文件传输
当与对方有多个文件正在传送中,点击关闭聊天窗口,咱们须要调用IFileOutter接口的CancelFileTransferingAbout方法来取消与当前聊天对象正在进行的全部文件传输。
众多其它细节,已经在ESFramework 4.0 快速上手(13) -- 文件传送,如此简单一文中做了详细介绍,这里再也不赘述。你们能够参考上文和本文,而后对照源码进行研究,很容易就能够理解内部的运转流程了。
三.Demo源码下载
Demo运行截图以下所示:
下载本文的Demo源码(VS2005)。