聊天系统Demo,增长文件传送功能(附源码)-- ESFramework 4.0 快速上手(14)

 本文咱们将介绍在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

   void Initialize(int port, ICustomizeInfoBusinessHandler customizeInfoBusinessHandler, IFileBusinessHandler fileBusinessHandler, IFriendsManager friendsManager, IGroupManager groupManager)        

      该重载方法多了一个IFileBusinessHandler(位于ESPlus.Application.FileTransfering.Server)参数,咱们直接传入框架提供ESPlus.Application.FileTransfering.Server.FileBusinessHandler实例便可。因为在本demo中,服务端即不会是文件发送方、也不会是文件接收方,因此服务端的初始化方法的IFileBusinessHandler参数只要不传入null,就表示服务端会支持客户端之间的文件传送功能。

      若是咱们要作的是相似FTP的系统,那么这个参数就很重要了,IFileBusinessHandler的实现决定了服务端对客户端上传文件的相关策略。在相似FTP的系统中,咱们只要将服务端看作是一个普通的文件收发方,就像一个收发文件的客户端同样,就能够公用一样的文件传送流程了。

 

二.客户端

      本Demo演示的主要是客户端之间的文件传送,因此客户端的逻辑稍微复杂一点,咱们分解说明以下。


1.初始化     

     客户端引擎RapidPassiveEngine的初始化也须要用另一个重载方法:

   void Initialize(string userID, string serverIP, int serverPort, IBasicBusinessHandler basicHandler, ICustomizeInfoBusinessHandler customizeHandler ,IFileBusinessHandler fileHandler);         

      该重载方法也是多了一个IFileBusinessHandler(位于ESPlus.Application.FileTransfering.Client)参数,IFileBusinessHandler接口有两个方法:ReadyToAcceptFile方法的实现一般是询问当前用户是否赞成接收对方发送的文件;而OnResponseOfReceiver方法的实现一般是告诉发送方对方是否赞成了接收文件。Demo中的MainForm类实现了IFileBusinessHandler接口。

 

2.发送文件

      在聊天窗口,当用户点击了左上角的发送文件按钮,并选择了要发送的文件后,程序就会经过IFileOutter接口的BeginSendFile方法来开启文件传送流程。

   void BeginSendFile(string accepterID, string filePath, string comment, SendingFileParas paras, out string fileID);

      咱们能够经过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方法来取消与当前聊天对象正在进行的全部文件传输。

   void CancelFileTransferingAbout(string destUserID);

 

      众多其它细节,已经在ESFramework 4.0 快速上手(13) -- 文件传送,如此简单一文中做了详细介绍,这里再也不赘述。你们能够参考上文和本文,而后对照源码进行研究,很容易就能够理解内部的运转流程了。
 

三.Demo源码下载

      Demo运行截图以下所示:

            

      下载本文的Demo源码(VS2005)。

相关文章
相关标签/搜索