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

      本文我们将介绍在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接口暴露的FileSendingEvents和FileReceivingEvents来跟踪每个文件传送项目的状态。 

 

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 高级进阶》系列所有文章 

 

时间: 2024-09-21 16:30:40

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

聊天系统Demo,增加Silverlight客户端(附源码)-- ESFramework 4.0 快速上手(09)

      在ESFramework 4.0 快速上手 -- 入门Demo,一个简单的IM系统(附源码)一文中,我们介绍了使用ESFramework的Rapid引擎开发的winform聊天程序,本文我们将在之前demo的基础上添加使用ESFramework.SL开发的Silverlight客户端.这样一来,不仅Silverlight客户端之间可以相互通信,Silverlight客户端还可以跟winform客户端进行通信.如果不了解在Silverlight中如何使用ESFramework,可以先看

一个简单的IM系统(Demo附源码)-- ESFramework 4.0 快速上手(08)

      前面的文章已经介绍完了基于ESFramework/ESPlus进行二次开发的所有要点,现在,我们可以开始小试牛刀了.       本文将介绍使用ESFramework的Rapid引擎开发的两个最简单的Demo,ESFramework.Demos.Simplest 和 ESFramework.Demos.Silverlight.这两个Demo是一个简单的聊天系统,并演示了以下功能: (1)客户端用户上下线时,通知其他在线用户. (2)当客户端与服务端网络断开时,进行自动重连,当网络恢复

jQuery 行级解析读取XML文件(附源码)_jquery

最近在做一个项目,因为页面使用了Cookie,所以要判断用户的浏览器是否支持Cookie,并提示用户如何开启浏览器的Cookie功能.同时,整个项目要配置多语言支持,包括中文.越南语.日语和英语,所以必须有语言配置文件.项目中应用jQuery解析读取XML语言配置文件来实现语言的调度.这是jQuery解析读取XML文件功能的测试源码,现拿出来分享.目录结构: main.css文件代码: 复制代码 代码如下: @CHARSET "UTF-8"; * { margin: 0px; padd

Asp.net实现直接在浏览器预览Word、Excel、PDF、Txt文件(附源码)_实用技巧

1.功能说明 输入文件路径,在浏览器输出文件预览信息,经测试360极速(Chrome).IE9/10.Firefox通过 2.分类文件及代码说明 DemoFiles 存放可测试文件 Default.aspx  启动页 ExcelPreview.cs  Excel预览类 public static void Priview(System.Web.UI.Page p, string inFilePath, string outDirPath = "") { Microsoft.Office

详解Android开发数据持久化之文件存储(附源码)

其实我们在社交网络上面所发出的任何信息, 都希望能够保留下来. 那么如何实现呢? 数据持久化 数据持久化, 就是将内存中的瞬时数据保存在存储设备中, 保证即便关机之后, 数据仍然存在. 保存在内存中的数据是瞬时数据, 保存在存储设备中的数据就是处于持久状态的. 持久化技术则是提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换, Android系统中主要提供了3种方式用于简单地实现数据持久化功能, 即文件存储, SharePreference存储, 以及数据库存储. 当然你也可以将数据保存在

【网站国际化必备】Asp.Net MVC 集成Paypal(贝宝)快速结账 支付接口 ,附源码demo

原文:[网站国际化必备]Asp.Net MVC 集成Paypal(贝宝)快速结账 支付接口 ,附源码demo        开篇先给大家讲段历史故事,博主是湖北襄阳人.襄阳物华天宝,人杰地灵,曾用名襄樊.在2800多年的历史文化中出现了一代名相诸葛亮(卧龙),三国名士庞统(凤雏),魏晋隐士司马徽(水镜先生),唐代大诗人孟浩然(孟襄阳),张继.杜审言,文学家皮日休,北宋著名书画家米芾(米襄阳),"允冠百王"的光武帝刘秀,东方圣人释道安等一大批历史文化名人.小说<三国演义>12

C#轻量级通通讯组件StriveEngine —— C/S通信开源demo(2) —— 使用二进制协议 (附源码)

前段时间,有几个研究ESFramework通信框架的朋友对我说,ESFramework有点庞大,对于他们目前的项目来说有点"杀鸡用牛刀"的意思,因为他们的项目不需要文件传送.不需要P2P.不存在好友关系.也不存在组广播.不需要服务器均衡.不需要跨服务器通信.甚至都不需要使用UserID,只要客户端能与服务端进行简单的稳定高效的通信就可以了.于是,他们建议我,整一个轻量级的C#通讯组件来满足类似他们这种项目的需求.我觉得这个建议是有道理的,于是,花了几天时间,我将ESFramework的

构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(32)-swfupload多文件上传[附源码]

原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(32)-swfupload多文件上传[附源码] 文件上传这东西说到底有时候很痛,原来的asp.net服务器控件提供了很简单的上传,但是有回传,还没有进度条提示.这次我们演示利用swfupload多文件上传,项目上文件上传是比不可少的,大家这个心里都知道.主要提供给源码说明及下载 最终效果图: SWFUpload的特点: 1.用flash进行上传,页面无刷新,且可自定义Flash按钮的样式; 2.可以在浏

仿酷狗音乐播放器开发日志二十一 开发动态调色板控件(附源码)

转载请说明原出处,谢谢~~           上一篇仿酷狗日志结束后,整个换肤功能就只剩下调色板功能没有做了,我本以为会很简单,但是研究了酷狗的调色板功能后发现不是那么简单的事情.首先看一下酷狗的调色板的样子:         我原本以为酷狗的主界面只是一张图片,然后通过鼠标坐标来选择颜色,简单粗暴.等我开始做这部分时发现情况不一样.         可以看到,酷狗的调色板分为两部分,上半部分是调色板的主界面,下半部分是调整亮度的工具栏,我这里分别给他们起名为Pallet和Bar方便说明.这个