本文咱們將介紹在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)。