聊天系統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)。

相關文章
相關標籤/搜索