偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

ESFramework4.0文件傳送 如此簡(jiǎn)單

開(kāi)發(fā) 后端
ESFramework 作為通信框架的核心,定義了消息處理的骨架流程,提供了多種通信引擎實(shí)現(xiàn),相對(duì)單純而穩(wěn)定。本文主要介紹ESFramework 在文件傳送方面的便捷,一起來(lái)看。

ESFramework,是一套可高度復(fù)用的、靈活的、單純而又強(qiáng)大的.NET通信框架,全部采用C#編寫(xiě)。ESFramework內(nèi)置了對(duì)Tcp和Udp的支持,并且支持文本協(xié)議和流協(xié)議,提供了多種網(wǎng)絡(luò)引擎供服務(wù)端和客戶端開(kāi)發(fā)人員輕松使用。采用ESFramework框架,使得您不需要了解Socket、不用再關(guān)心底層與通信相關(guān)的一切瑣碎的事情,就可以在一個(gè)更高的層次上更快地開(kāi)發(fā)屬于您的高效穩(wěn)定的網(wǎng)絡(luò)通信應(yīng)用。像IM系統(tǒng)、視頻會(huì)議系統(tǒng)、數(shù)據(jù)采集系統(tǒng)等,凡是需要分布式通信的系統(tǒng)都可以使用ESFramework框架。

一.ESPlus的文件傳送流程

ESPlus定義了文件傳送的標(biāo)準(zhǔn)流程,可以用下圖表示:

 

(1)由發(fā)送方發(fā)起傳送文件的請(qǐng)求。

(2)接收方回復(fù)同意或者拒絕接收文件。如果拒收,則流程結(jié)束;否則進(jìn)入下一步。

(3)發(fā)送方發(fā)送文件數(shù)據(jù),接收方接收文件數(shù)據(jù)。

(4)如果文件傳送過(guò)程中,接收方或發(fā)送方掉線或者取消文件傳送,則文件傳送被中斷,流程結(jié)束。如果文件傳送過(guò)程一直正常,則到***完成文件的傳送。

有幾點(diǎn)需要說(shuō)明一下:

(1)發(fā)送方可以是客戶端,也可以是服務(wù)器;接收方也是如此。但無(wú)論發(fā)送方和接收方的類(lèi)別如何,它們都遵守這一文件傳送流程;就像ESFramework所有的通信引擎都公用同一套消息處理骨架流程一樣。

(2)當(dāng)接收方同意接收后,框架會(huì)自動(dòng)搜索是否存在匹配的續(xù)傳項(xiàng)目,若存在,則會(huì)啟動(dòng)斷點(diǎn)續(xù)傳。當(dāng)然,我們可以通過(guò)文件接收管理器的屬性來(lái)控制斷點(diǎn)續(xù)傳功能是否開(kāi)啟。關(guān)于斷點(diǎn)續(xù)傳的更多內(nèi)容,可以參考ESFramework 4.0 文件斷點(diǎn)續(xù)傳原理與實(shí)現(xiàn)。

(3)進(jìn)行文件傳送的線程是由框架自動(dòng)控制的,只要發(fā)送方收到了接收方同意接收的回復(fù),框架就會(huì)自動(dòng)在后臺(tái)線程中發(fā)送文件數(shù)據(jù)包;同樣,此時(shí)接收方也會(huì)自動(dòng)處理接收到的文件數(shù)據(jù)包。

(4)發(fā)送方或接收方都可隨時(shí)取消正在傳送的文件。

(5)當(dāng)文件傳送被中斷或完成時(shí),發(fā)送方和接收方都會(huì)有相應(yīng)的事件通知。

 

二.ESPlus用于支持文件傳送的基礎(chǔ)設(shè)施

1.TransmittingFileInfo

無(wú)論是發(fā)送方還是接收方,針對(duì)每個(gè)文件傳送任務(wù),都需要有個(gè)對(duì)象來(lái)表示它,TransmittingFileInfo便是一個(gè)文件傳送項(xiàng)目的封裝,里面包含了類(lèi)似發(fā)送者ID、接收者ID、文件名稱(chēng)等相關(guān)信息。

 

TransmittingFileInfo的大部分屬性對(duì)于發(fā)送方和接收方都是有效的,而有幾個(gè)屬性只對(duì)發(fā)送方有效(比如SendingFileParas),有幾個(gè)屬性只對(duì)接收方有效(如LocalSaveFilePath),這些在幫助文檔中都有詳細(xì)的說(shuō)明。而且,有些屬性(如OriginFileLastUpdateTime)的存在是用于支持?jǐn)帱c(diǎn)續(xù)傳功能的。

 

2.FileTransDisrupttedType

ESPlus使用FileTransDisrupttedType枚舉定義了所有可能導(dǎo)致文件傳送中斷的原因:

 

  1. public enum FileTransDisrupttedType  
  2. {  
  3. /// <summary>  
  4. /// 自己主動(dòng)取消  
  5. /// </summary>  
  6. ActiveCancel,  
  7. /// <summary>  
  8. /// 對(duì)方取消  
  9. /// </summary>  
  10. DestCancel,  
  11. /// <summary>  
  12. /// 對(duì)方掉線  
  13. /// </summary>  
  14. DestOffline,  
  15. /// <summary>  
  16. /// 網(wǎng)絡(luò)中斷、自己掉線  
  17. /// </summary>  
  18. SelfOffline,  
  19. /// <summary>  
  20. /// 對(duì)方拒絕接收文件  
  21. /// </summary>  
  22. DestReject,  
  23. /// <summary>  
  24. /// 其它原因,如文件讀取失敗等  
  25. /// </summary>  
  26. OtherCause  
  27. }  

 

3.IFileTransferingEvents 接口

ESPlus定義了IFileTransferingEvents接口,用于暴露所有與文件傳送相關(guān)的狀態(tài)和事件:

 

  1. public interface IFileTransferingEvents  
  2. {  
  3. /// <summary>  
  4. /// 當(dāng)某個(gè)文件開(kāi)始傳送時(shí),觸發(fā)該事件。  
  5. /// </summary>  
  6. event CbGeneric<TransmittingFileInfo> FileTransStarted;  
  7. /// <summary>  
  8. /// 當(dāng)某個(gè)文件續(xù)傳開(kāi)始時(shí),觸發(fā)該事件。(將不再觸發(fā)FileTransStarted事件)  
  9. /// </summary>  
  10. event CbGeneric<TransmittingFileInfo> FileResumedTransStarted;  
  11. /// <summary>  
  12. /// 文件傳送的進(jìn)度。參數(shù)為fileID(文件編號(hào)) ,total(文件大?。?nbsp;,transfered(已傳送字節(jié)數(shù))  
  13. /// </summary>  
  14. event CbFileSendedProgress FileTransProgress;   
  15. /// <summary>  
  16. /// 文件傳送中斷時(shí),觸發(fā)該事件。  
  17. /// </summary>  
  18. event CbGeneric<TransmittingFileInfo, FileTransDisrupttedType> FileTransDisruptted;  
  19. /// <summary>  
  20. /// 文件傳送完成時(shí),觸發(fā)該事件。  
  21. /// </summary>  
  22. event CbGeneric<TransmittingFileInfo> FileTransCompleted;   

通過(guò)預(yù)定這些事件,我們可以知道每個(gè)傳送的文件什么時(shí)候開(kāi)始(或斷點(diǎn)續(xù)傳)、什么時(shí)候完成、傳遞的實(shí)時(shí)進(jìn)度、傳送中斷的原因等等。要注意的是,這些事件都是在后臺(tái)線程中觸發(fā)的,如果在事件處理函數(shù)中需要更新UI,則需要將調(diào)用轉(zhuǎn)發(fā)到UI線程。

 

4.SendingFileParas

該對(duì)象僅僅包含兩個(gè)屬性:SendingSpanInMSecs和FilePackageSize。發(fā)送方可以通過(guò)SendingFileParas對(duì)象來(lái)指定發(fā)送文件數(shù)據(jù)包時(shí)的頻率與每個(gè)數(shù)據(jù)包的大小。一般來(lái)說(shuō),為了達(dá)到最快的傳送速度,SendingSpanInMSecs可以設(shè)為0。而FilePackageSize的大小則要根據(jù)發(fā)送方與接收方的網(wǎng)絡(luò)環(huán)境的好壞進(jìn)行決定,在Internet上,一般可以設(shè)為2048或4096左右;而在局網(wǎng)內(nèi),可以設(shè)為204800甚至更大(在局網(wǎng)的傳送速度可以達(dá)到30M/s以上)。

 

5.IFileController

通過(guò)ESPlus.Application.FileTransfering.IFileController接口,我們可以提交發(fā)送文件的請(qǐng)求,并且可以主動(dòng)取消正在接收或發(fā)送的文件。IFileController即可用于客戶端也可用戶服務(wù)端。

 

  1. public interface IFileController  
  2. {  
  3. /// <summary>  
  4. /// 該事件接口暴露了所有正在發(fā)送文件的實(shí)時(shí)狀態(tài)。  
  5. /// </summary>  
  6. IFileTransferingEvents FileSendingEvents { get; }  
  7. /// <summary>  
  8. /// 該事件接口暴露了所有正在接收的文件的實(shí)時(shí)狀態(tài)。  
  9. /// </summary>  
  10. IFileTransferingEvents FileReceivingEvents { get; }  
  11. /// <summary>  
  12. /// 準(zhǔn)備發(fā)送文件。如果對(duì)方同意接收,則后臺(tái)會(huì)自動(dòng)發(fā)送文件;如果對(duì)方拒絕接收,則會(huì)取消發(fā)送。  
  13. /// 如果要發(fā)送的文件不存在或被占用,則將拋出對(duì)應(yīng)的異常。  
  14. /// </summary>   
  15. /// <param name="accepterID">接收文件的用戶ID</param>  
  16. /// <param name="filePath">被發(fā)送文件的路徑</param>  
  17. /// <param name="comment">其它附加備注。如果是在類(lèi)似FTP的服務(wù)中,該參數(shù)可以是保存文件的路徑</param>   
  18. /// <param name="fileID">返回即將發(fā)送文件的唯一編號(hào)</param>  
  19. void BeginSendFile(string accepterID, string filePath, string comment, out string fileID);  
  20. /// <summary>  
  21. /// 準(zhǔn)備發(fā)送文件。如果對(duì)方同意接收,則后臺(tái)會(huì)自動(dòng)發(fā)送文件;如果對(duì)方拒絕接收,則會(huì)取消發(fā)送。  
  22. /// 如果要發(fā)送的文件不存在或被占用,則將拋出對(duì)應(yīng)的異常。  
  23. /// </summary>  
  24. /// <param name="accepterID">接收文件的用戶ID</param>  
  25. /// <param name="filePath">被發(fā)送文件的路徑</param>  
  26. /// <param name="comment">其它附加備注。如果是在類(lèi)似FTP的服務(wù)中,該參數(shù)可以是保存文件的路徑</param>  
  27. /// <param name="paras">發(fā)送參數(shù)設(shè)定。傳入null,表示采用IFileSenderManager的默認(rèn)設(shè)置。</param>  
  28. /// <param name="fileID">返回即將發(fā)送文件的唯一編號(hào)</param>  
  29. void BeginSendFile(string accepterID, string filePath, string comment,SendingFileParas paras, out string fileID);  
  30. /// <summary>  
  31. /// 主動(dòng)取消正在發(fā)送或接收的文件,并通知對(duì)方。  
  32. /// </summary>   
  33. void CancelFileTransfering(string fileID);   
  34. /// <summary>  
  35. /// 取消與某個(gè)用戶相關(guān)的正在傳送項(xiàng)目。  
  36. /// </summary>   
  37. /// <param name="destUserID">目標(biāo)用戶ID。</param>  
  38. void CancelFileTransferingAbout(string destUserID);   
  39. /// <summary>  
  40. /// 獲取正在發(fā)送或接收中的文件的相關(guān)信息。  
  41. /// </summary>   
  42. TransmittingFileInfo GetFileInfo(string fileID);  

(1)BeginSendFile用于向接收方提交發(fā)送文件的請(qǐng)求,如果對(duì)方同意,則后臺(tái)會(huì)自動(dòng)開(kāi)始傳遞文件。該方法有個(gè)out參數(shù)fileID,用于傳出標(biāo)記該文件傳送項(xiàng)目的唯一編號(hào),比如,你打算將同一個(gè)文件發(fā)送給兩個(gè)好友,將會(huì)調(diào)用兩次BeginSendFile方法,而兩次得到的fileID是不一樣的。也就是說(shuō),fileID是用于標(biāo)記文件傳送項(xiàng)目的,而不是標(biāo)記文件的。

該方法有兩個(gè)重載,區(qū)別在于第二個(gè)BeginSendFile方法多了一個(gè)SendingFileParas參數(shù),用于主動(dòng)控制文件數(shù)據(jù)包的大小和發(fā)送頻率。

在客戶端使用時(shí),BeginSendFile方法不僅可以向其他在線用戶提交發(fā)送文件的請(qǐng)求,也可以直接向服務(wù)器提交發(fā)送文件的請(qǐng)求 -- 即此時(shí)文件的接收者為服務(wù)端。我們只需要將accepterID參數(shù)傳入NetServer.SystemUserID,以指明由服務(wù)端而不是其他用戶來(lái)接收即將發(fā)送的文件。

(2)GetFileInfo方法可以獲取任何一個(gè)正在發(fā)送或正在接收的項(xiàng)目信息。

(3)CancelFileTransfering方法用于取消正在發(fā)送或接收的某個(gè)文件傳送項(xiàng)目,調(diào)用該方法時(shí),框架會(huì)自動(dòng)通知文件傳送的另一端用戶,并觸發(fā)FileReceivingEvents或FileSendingEvents中的FileTransDisruptted事件,而另一端也會(huì)自動(dòng)觸發(fā)FileTransDisruptted事件。

(4)CancelFileTransferingAbout方法用于取消與某個(gè)指定用戶相關(guān)的正在傳送項(xiàng)目。比如,我們正在與aa01用戶聊天,并且與aa01有多個(gè)文件正在傳送,此時(shí),如果要關(guān)閉與aa01的聊天窗口,那么關(guān)閉之前,通常會(huì)先調(diào)用CancelFileTransferingAbout方法來(lái)取消與aa01相關(guān)的所有文件傳送。所以你經(jīng)常會(huì)看到類(lèi)似的提示:“您與aa01有文件正在傳送中,關(guān)閉當(dāng)前窗口將導(dǎo)致正在傳送的文件中斷,您確定要關(guān)閉嗎?”。如果用戶確認(rèn)關(guān)閉,此時(shí)就正是我們要調(diào)用CancelFileTransferingAbout方法的時(shí)候了。

(5)FileSendingEvents屬性用于暴露自己作為發(fā)送者的所有正在進(jìn)行的文件傳送項(xiàng)目的實(shí)時(shí)狀態(tài);FileReceivingEvents屬性用于暴露自己作為接收者的所有正在進(jìn)行的文件傳送項(xiàng)目的實(shí)時(shí)狀態(tài)。

 

6.IFileHandler

IFileHandler接口將被框架回調(diào)以實(shí)現(xiàn)文件傳送機(jī)制。同IFileController一樣,其既可用于客戶端也可用戶服務(wù)端。

我們需要實(shí)現(xiàn)ESPlus.Application.FileTransfering.IFileHandler接口來(lái)獲取與文件傳送請(qǐng)求相關(guān)通知:

 

  1. public interface IFileBusinessHandler : IBusinessHandler  
  2. {   
  3. /// <summary>  
  4. /// 是否同意接收文件?  
  5. /// </summary>   
  6. /// <param name="senderID">發(fā)送者的ID。如果為NetServer.SystemUserID,則表示是服務(wù)端發(fā)送的。</param>  
  7. /// <param name="fileName">文件名稱(chēng)。</param>  
  8. /// <param name="fileLength">文件大小。</param>  
  9. /// <param name="comment">其它附加備注。如果是在類(lèi)似FTP的服務(wù)中,該參數(shù)可以是保存文件的路徑</param>  
  10. /// <param name="fileID">文件ID。</param>  
  11. /// <param name="resumedFileItem">如果能續(xù)傳,則不為null。</param>  
  12. /// <returns>返回值為保存文件的路徑,如果為null,表示拒絕接收/拒絕續(xù)傳文件。如果參數(shù)resumedFileItem不為null,而且返回路徑等于resumedFileItem.LocalFileSavePath,則表示續(xù)傳;否則表示另存。</returns>  
  13. string ReadyToAcceptFile(string senderID, string fileName, long fileLength, string comment, string fileID, ResumedFileItem resumedFileItem);   
  14. /// <summary>  
  15. /// 接收者對(duì)自己發(fā)送文件請(qǐng)求的回復(fù) -- 同意/拒絕接收。  
  16. /// </summary>  
  17. /// <param name="info">文件傳送項(xiàng)目的相關(guān)信息</param>  
  18. /// <param name="agreed">對(duì)方是否同意</param>  
  19. void OnResponseOfReceiver(TransmittingFileInfo info ,bool agreed);  

(1)ReadyToAcceptFile方法是當(dāng)前用戶作為接收方時(shí)被框架回調(diào)的;而OnResponseOfReceiver方法是當(dāng)前用戶作為發(fā)送方時(shí),被框架回調(diào)的。

(2)IFileHandler接口的兩個(gè)方法都將在后臺(tái)線程中被框架調(diào)用,如果實(shí)現(xiàn)該方法時(shí)需要刷新應(yīng)用程序的UI,則注意一定要轉(zhuǎn)發(fā)到UI線程。

(3)當(dāng)發(fā)送方提交了發(fā)送文件的請(qǐng)求后,框架會(huì)在接收方回調(diào)ReadyToAcceptFileAsyn方法以詢問(wèn)是否同意接收,如果同意,ReadyToAcceptFileAsyn應(yīng)返回有效的存儲(chǔ)接收文件的路徑,否則,返回null。

(4)當(dāng)接收方同意或拒絕接收文件,框架會(huì)在發(fā)送方回調(diào)OnResponseOfReceiver方法以通知發(fā)送者。通常,應(yīng)用程序在實(shí)現(xiàn)OnResponseOfReceiver方法時(shí),最多只需要告知文件發(fā)送者,而不需要再做任何其它的額外處理。因?yàn)榭蚣芤呀?jīng)幫你打理好了一切。

當(dāng)接收方同意接收文件后,與該文件傳送項(xiàng)目相關(guān)的事件會(huì)通過(guò)IFileOutter暴露的IFileTransferingEvents接口相繼觸發(fā)。

#p#

 

三.客戶端

同ESPlus的Basic應(yīng)用或CustomizeInfo應(yīng)用一樣,在客戶端支持文件傳送功能也需要使用到相應(yīng)的“Outter”組件和實(shí)現(xiàn)相應(yīng)的“BusinessHandler”接口。

1.IFileOutter

 

  1. ESPlus.Application.FileTransfering.Passive.IFileOutter接口從IFileController繼承,并增加了一個(gè)屬性和一個(gè)方法:  
  2. public interface IFileOutter : IOutter ,IFileController  
  3. {  
  4. /// <summary>  
  5. /// 發(fā)送文件數(shù)據(jù)包時(shí)所采用的消息優(yōu)先級(jí)。  
  6. /// </summary>  
  7. DataPriority DataPriority4SendingFile { getset; }  
  8. /// <summary>  
  9. /// 初始化文件傳送查看器控件。  
  10. /// </summary>  
  11. /// <param name="viewer">文件傳送查看器控件對(duì)象</param>  
  12. /// <param name="destUserID">目標(biāo)用戶的ID。返回的查看器將顯示與該用戶相關(guān)的所有文件傳送狀態(tài)。如果傳入null,則顯示與任何用戶的文件傳送的實(shí)時(shí)狀態(tài)。</param>  
  13. void InitializeFileTransferingViewer(FileTransferingViewer viewer, string destUserID);  

(1)我們可以通過(guò)設(shè)置DataPriority4SendingFile屬性以控制發(fā)送文件數(shù)據(jù)包的優(yōu)先級(jí),在一般系統(tǒng)中,可以將其設(shè)置為Common或Low,但絕不能設(shè)置為CanBeDiscarded,否則將可能導(dǎo)致接收方接收到的文件不完整。

(2)ESPlus提供了默認(rèn)的傳送項(xiàng)目的狀態(tài)查看器控件FileTransferingViewer,如果沒(méi)有特殊需求,大家在項(xiàng)目中可以直接使用它來(lái)顯示文件傳送的實(shí)時(shí)狀態(tài),它的界面截圖如下所示:

 

你只需要把這個(gè)控件拖拽到你的UI上,然后將其傳入IFileOutter的InitializeFileTransferingViewer方法進(jìn)行初始化后,它就會(huì)正常工作了。

InitializeFileTransferingViewer方法的第二個(gè)參數(shù)destUserID表示當(dāng)前的FileTransferingViewer控件要顯示與哪個(gè)好友相關(guān)的所有文件傳送項(xiàng)目的狀態(tài)。以QQ作類(lèi)比,你同時(shí)在與多個(gè)好友傳送文件,那么就會(huì)有多個(gè)聊天窗口,每個(gè)聊天窗口都會(huì)有一個(gè)FileTransferingViewer實(shí)例,而這個(gè)FileTransferingViewer實(shí)例僅僅顯示與當(dāng)前聊天窗口對(duì)應(yīng)的好友的傳送項(xiàng)目。這樣依賴(lài),你與aa01用戶傳送文件的進(jìn)度查看器就不會(huì)在你與aa02的聊天窗口上顯示出來(lái)。

如果你的FileTransferingViewer查看器需要捕捉所有正在傳送的項(xiàng)目的實(shí)時(shí)狀態(tài),那么,調(diào)用InitializeFileTransferingViewer方法時(shí),destUserID參數(shù)可以傳入null。

另外,F(xiàn)ileTransferingViewer實(shí)現(xiàn)了IFileTransferingViewer接口:

 

  1. public interface IFileTransferingViewer  
  2. {  
  3. /// <summary>  
  4. /// 當(dāng)某個(gè)文件開(kāi)始續(xù)傳時(shí),觸發(fā)該事件。參數(shù)為FileName - isSend  
  5. /// </summary>  
  6. event CbGeneric<stringbool> FileResumedTransStarted;  
  7. /// <summary>  
  8. /// 當(dāng)某個(gè)文件傳送完畢時(shí),觸發(fā)該事件。參數(shù)為FileName - isSend  
  9. /// </summary>  
  10. event CbGeneric<stringbool> FileTransCompleted;  
  11. /// <summary>  
  12. /// 當(dāng)某個(gè)文件傳送中斷時(shí),觸發(fā)該事件。參數(shù)為FileName - isSend - FileTransDisrupttedType  
  13. /// </summary>  
  14. event CbGeneric<stringbool, FileTransDisrupttedType> FileTransDisruptted;  
  15. /// <summary>  
  16. /// 當(dāng)某個(gè)文件傳送開(kāi)始時(shí),觸發(fā)該事件。參數(shù)為FileName - isSend  
  17. /// </summary>  
  18. event CbGeneric<stringbool> FileTransStarted;  
  19. /// <summary>  
  20. /// 當(dāng)所有文件都傳送完成時(shí),觸發(fā)該事件。  
  21. /// </summary>  
  22. event CbSimple AllTaskFinished;  
  23. /// <summary>  
  24. /// 當(dāng)點(diǎn)擊取消按鈕終止某個(gè)文件傳送時(shí),觸發(fā)該事件。  
  25. /// </summary>  
  26. event CbCancelFile CancelFileButtonClicked;   
  27. /// <summary>  
  28. /// 當(dāng)前是否有文件正在傳送中。  
  29. /// </summary>   
  30. bool IsFileTransfering();  
  31. }  

你也可以通過(guò)該接口來(lái)關(guān)注FileTransferingViewer查看器捕捉到的(正如前所述,不一定是全部)文件傳送項(xiàng)目的狀態(tài),而且,該接口的事件都是在UI線程中觸發(fā)的,你可以直接在其處理函數(shù)中操控UI顯示。

 

2.IFileBusinessHandler

客戶端的ESPlus.Application.FileTransfering.Passive.IFileBusinessHandler直接從IFileHandler繼承,而且沒(méi)有增加額外的內(nèi)容:

 

  1. public interface IFileBusinessHandler : IBusinessHandler, IFileHandler  
  2. {   
  3. }  

 

四.服務(wù)端

服務(wù)端也可以接收客戶端發(fā)送的文件(即上傳),甚至可以發(fā)送文件給客戶端(即下載),它遵循同樣的文件傳送流程。

1.IFileTransferingController

如果需要服務(wù)端也參與到文件的發(fā)送與接收中來(lái),則同客戶端一樣,服務(wù)端的ESPlus.Application.FileTransfering.Server.IFileTransferingController接口也從IFileController繼承,以提交文件發(fā)送請(qǐng)求、或取消正在發(fā)送中的文件等,這里就不重復(fù)解釋了。

2.IFileBusinessHandler

服務(wù)端需要實(shí)現(xiàn)ESPlus.Application.FileTransfering.Server.IFileBusinessHandler接口,也是直接從IFileHandler繼承,而且沒(méi)有增加額外的內(nèi)容。

 

五.Rapid引擎對(duì)文件傳送的支持

新版本的Rapid引擎(可以從ESFramework 4.0 概述文末下載 ),增加了對(duì)文件傳送的支持,使用Rapid引擎的朋友可以很方便的利用框架提供的文件傳送功能。

1.客戶端

IRapidPassiveEngine的Initialize方法增加了一個(gè)重載:

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

該重載增加了一個(gè)IFileBusinessHandler參數(shù),用于支持文件傳送機(jī)制。

另外,IRapidPassiveEngine增加了一個(gè)IFileOutter只讀屬性,通過(guò)暴露的該屬性,我們就可以提交發(fā)送文件的請(qǐng)求或監(jiān)控文件傳送的狀態(tài)了。當(dāng)然,如果在Initialize方法中沒(méi)有傳入有效的IFileBusinessHandler引用,則FileOutter屬性將返回null。

 

2.服務(wù)端

同客戶端一樣,服務(wù)端IRapidServerEngine的Initialize方法也增加了一個(gè)重載:

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

IRapidServerEngine提供了IFileTransferingController只讀屬性,用于提交發(fā)送文件的請(qǐng)求或監(jiān)控文件傳送的狀態(tài)。同樣的,如果在Initialize方法中沒(méi)有傳入有效的IFileBusinessHandler引用,則FileTransferingController屬性將返回null。

 

Rapid引擎已經(jīng)為我們組裝好了與文件傳送相關(guān)的所有組件,我們直接使用即可。如果后面有時(shí)間,我們會(huì)更深入地剖析ESPlus的文件傳送機(jī)制背后的原理,以及如何一步步地搭建起文件傳送的功能。

ESPlus使得在基于ESFramework的通信系統(tǒng)中增加文件傳送的功能變得如此簡(jiǎn)單,甚至,基于ESPlus提供的文件傳送功能,我們可以很快地實(shí)現(xiàn)文件服務(wù)器,以支持文件上傳和下載。希望能給你帶來(lái)幫助。

【編輯推薦】

  1. 教你寫(xiě)不可思議的C#代碼
  2. C#用Activex實(shí)現(xiàn)Web客戶端讀取RFID功能
  3. Visual Studio 2010調(diào)用非C#編寫(xiě)的DLL文件
  4. More Effective C#:改善 C#程序的 50個(gè)具體辦法

 

責(zé)任編輯:于鐵 來(lái)源: 博客園
相關(guān)推薦

2021-12-08 10:36:46

JavaPDF文件

2021-12-09 09:02:53

JavaPDF文件iText

2021-01-07 09:56:43

Windows 功能系統(tǒng)

2020-02-20 16:07:45

IT需求

2022-02-23 20:42:40

HTMLmarkdownturndown

2020-12-28 07:47:35

動(dòng)態(tài)代理AOP

2010-07-12 17:37:03

SQL Server

2011-08-29 09:26:57

Windows 8文件界面

2010-04-23 18:03:55

Aix 5.1

2010-06-28 14:49:51

SQL Server

2010-08-25 21:50:36

配置DHCP

2024-12-03 08:43:49

2022-08-12 12:19:13

Cluster檢索集群

2012-09-29 09:33:39

PowerPointOffice 2013

2012-09-20 09:32:23

Ubuntu 12.1文件系統(tǒng)Ubuntu

2010-01-15 12:50:02

CentOS 4文件

2012-09-20 09:24:41

Ubuntu 12.1文件系統(tǒng)

2011-10-11 10:53:29

Ubuntu 11.1Gnome 3.2

2009-04-29 01:39:57

破解美萍萬(wàn)象

2013-04-23 14:25:28

gnupg文件加密
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)