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

      本文我们将介绍在ESFramework 4.0 快速上手(08) -- 入门Demo,一个简单的IM系统(附源码)的基础上,增加文件传送的功能。如果不了解如何使用ESFramework提供的文件传送功能,可以先看看ESFramework 4.0 快速上手(13) -- 文件传送,如此简单一文的详细介绍。

      本Demo可演示以下与文件传送相关的特性:

(1)发送方请求发送文件,接收方可以同意或拒绝接收文件。

(2)文件传送的过程中,收发的任何一方都可以通过事件了解文件传送的实时进度。

(3)文件传送的过程中,收发的任何一方都可以中断文件的传送。

(4)文件传送的过程中,收发的任何一方掉线,都将导致文件传送中断。

(5)只要文件传送中断,收发方都会得到相应的事件通知。

(6)自动启用文件断点续传。

(7)文件传送完成,收发方都会得到相应的事件通知。

 

一.服务端
      服务端只需要用调用引擎RapidServerEngine的初始化方法的另外一个重载就可以启用框架的文件传送功能:

   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接口暴露的FileSendingEventsFileReceivingEvents来跟踪每个文件传送项目的状态。 

 

5. 关闭聊天窗口的时候,中断文件传输

      当与对方有多个文件正在传送中,点击关闭聊天窗口,我们需要调用IFileOutter接口的CancelFileTransferingAbout方法来取消与当前聊天对象正在进行的所有文件传输。

   void CancelFileTransferingAbout(string destUserID);

 

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

三.Demo源码下载

      Demo运行截图如下所示:

            

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

 

      本Demo主要演示了客户端与客户端之间的文件传送,后面我们将推出一个新的demo,用于演示客户端与服务端之间的文件传送,以实现最简单的的FTP服务器(文件上传与下载)。敬请关注,谢谢。

 

ESFramework 4.0 概述

ESFramework 4.0 有哪些优点?

ESFramework 4.0 版本升级说明(持续更新)

《ESFramework 4.0 快速上手》系列所有文章

《ESFramework 4.0 高级进阶》系列所有文章 

 

posted on 2011-04-21 09:05 zhuweisky 阅读(2601) 评论(14) 编辑 收藏

评论

#1楼 2011-04-21 09:24 风云      

强!  回复 引用 查看   

#2楼 2011-04-21 09:55 废墟中的垃圾      

请问楼主,这个支持多人聊天吗?  回复 引用 查看   

#3楼 2011-04-21 10:16 小洋(燕洋天)      

这个文件传输我用过,比较不错,而且我还测试了断点续传,可以!  回复 引用 查看   

#4楼[楼主] 2011-04-21 10:36 zhuweisky      

引用废墟中的垃圾:请问楼主,这个支持多人聊天吗?

利用自定义广播信息,就可以实现多人聊天了啊
 回复 引用 查看   

#5楼 2011-04-21 10:43 温景良(Jason)      

asp.net弄个demo看看  回复 引用 查看   

#6楼 2011-04-21 10:43 温景良(Jason)      

还有这玩意如果要源代码,楼主打算卖多少钱.  回复 引用 查看   

#7楼[楼主] 2011-04-21 10:49 zhuweisky      

@温景良(Jason):不卖源码的。呵呵  回复 引用 查看   

#8楼 2011-04-21 15:30 wangjun8868      

x希望以后推出 视频聊天  回复 引用 查看   

#9楼 2011-04-22 12:51 秋色      

源码好象非常昂贵 。只是一个DLL就要好几千。这样的东西以后还是别在往博客园发了。  回复 引用 查看   

#10楼[楼主] 2011-04-22 14:12 zhuweisky      

@秋色:不卖源码的。不知你从哪里可以买到源码?请告诉我。  回复 引用 查看   

#11楼 2011-04-25 12:42 秦时 明月      

楼主,要是我们用你的产品是不是免费的?

要是没有源代码要是项目中出了问题,怎么办?
 回复 引用 查看   

#12楼[楼主] 2011-04-25 14:10 zhuweisky      

@秦时 明月:请咨询QQ 372841921,谢谢。  回复 引用 查看   

#13楼 2011-06-16 16:02 自学不成材      

楼主,我一直在关注ESFramework,请问什么时候推出一个演示客户端与服务端之间文件传送的demo啊?期待中  回复 引用 查看   

#14楼[楼主] 2011-06-17 10:09 zhuweisky      

@自学不成材
Demo早已完成,将在下次新版本发布时,一起放出。
 回复 引用 查看   

导航

公告

             

人的灵魂要强,

接受人的脆弱。

昵称:zhuweisky
园龄:6年7个月
荣誉:推荐博客
粉丝:210
关注:10

统计

搜索

 
 

随笔分类(267)

随笔档案(283)

积分与排名

最新评论

阅读排行榜

推荐排行榜