WorldWind源码剖析系列:网络下载类WebDownload

网络下载类WebDownload封装了对请求的瓦片进行网络下载的相关操作。该类使用了两个委托类型和一个枚举类型。 该类的类图如下。

WorldWind源码剖析系列:网络下载类WebDownload 

网络下载类WebDownload各个字段和属性的含义说明如下:

static public bool Log404Errors = false;//网络下载错误类型

static public bool useWindowsDefaultProxy = true;//是否使用Windows默认代理

static public string proxyUrl = "";//代理的URL字符串,默认为空

static public bool useDynamicProxy;// 是否使用动态代理

static public string proxyUserName = "";//代理用户名,默认为空

static public string proxyPassword = "";//代理密码,默认为空

public static string UserAgent//用户代理

public string Url;//统一资源定位符

public Stream ContentStream;//内存下载填充的数据内容流

public string SavedFilePath;//保存路径

public bool IsComplete;//是否下载完成

public DownloadProgressHandler ProgressCallback;//当数据正在被接收时调用。注意:如果服务器没有回复内容长度,总的字节数将为零

public static DownloadCompleteHandler DebugCallback;//被调用来更新debug窗口

public static DownloadCompleteHandler DownloadEnded; //当一个下载结束于成功或失败时被调用

public DownloadCompleteHandler CompleteCallback; //当一个下载完成时被调用。调用核实(查证)函数,以从事件处理函数里抛出任何异常

public DownloadType DownloadType = DownloadType.Unspecified;//下载类型

public string ContentType; //数据内容类型:浮点型或16位整形

public int BytesProcessed; //被处理的字节数

public int ContentLength; //数据内容长度

public bool Compressed = false;//是否被压缩,允许地点查找器使用gzipped压缩请求,默认为不压缩的请求,以免终端其它事情

public string ContentEncoding; //数据内容编码

public DateTime DownloadStartTime = DateTime.MinValue; //下载开始时间,如果还没有开始下载则设置为DateTime.MinValue

internal HttpWebRequest request; //Http网络请求

internal HttpWebResponse response; //Http网络响应

protected Exception downloadException;//下载异常

protected bool isMemoryDownload;//是否是内存下载

private bool stopFlag = false;//是否停止下载的标识,作为下载线程终止的标识

protected Thread dlThread;//下载线程

public bool IsDownloadInProgress//下载是否正在进行中的标识,通过判断下载线程对象是否为空以及是否处于活动状态来判断

public Exception Exception//下载异常字段的只读属性

构造函数都比较简单,不再赘述。

方法public void BackgroundDownloadFile()发起后台下载文件的线程,异步地下载请求数据到文件。被另外两种重载类型调用。重载一先注册下载完成事件委托实例CompleteCallback的处理函数,然后再调用原型函数发起后台异步下载数据的线程。重载二先设置下载完类型,然后再调用原型函数发起后台异步下载数据的线程,用来下载特定类型的影像数据,需要为WMS请求处理服务错误

方法public void BackgroundDownloadMemory()发起后台内存下载文件的线程,异步地下载请求数据到内存缓冲区。被另外两种重载类型调用。重载一先注册下载完成事件委托实例CompleteCallback的处理函数,然后再调用原型函数发起后台异步下载数据的线程。重载二先设置下载完类型,然后再调用原型函数发起后台异步下载数据的线程,用来下载特定类型的影像数据,需要为WMS请求处理服务错误

方法public void DownloadFile( string destinationFile ) 同步地下载请求数据到文件,其内部调用Download()函数真正完成同步数据下载。被另外一种重载类型调用。其重载先设置下载类型,然后再调用原型函数下载数据

方法public void DownloadMemory( DownloadType dlType ) 同步地下载请求数据到内存缓冲区。被另外两种重载类型调用。重载一先设置下载类型,然后再调用原型函数同步下载数据。重载二先注册下载处理中事件委托实例progressCallback的处理函数,然后再调用原型函数同步下载数据

方法public void Cancel()终止当前的下载

方法public void SaveMemoryDownloadToFile(string destinationFilePath )保存Http内存下载数据到文件中

方法private void OnProgressCallback(int bytesRead, int totalBytes)表示正在下载中的回调函数,内部调用委托ProgressCallback注册的处理函数。该方法被Download()函数三次调用

方法private static void OnDebugCallback(WebDownload wd)当需要下载细节信息是被调用,内部调用委托DebugCallback注册的处理函数。该方法被Download()函数三次调用,被Dispose()函数调用一次

方法private static void OnDownloadEnded(WebDownload wd)当下载已经结束时被调用,内部调用委托DownloadEnded注册的处理函数。该方法被Download()函数一次调用

方法protected void Download()同步进行HTTP下载,被前文提到的异步文件下载BackgroundDownloadFile,异步内存下载BackgroundDownloadMemory,同步文件下载DownloadFile,同步内存下载DownloadMemory四个函数四次调用。该方法的概略执行步骤为:先调用OnProgressCallback和OnDebugCallback去通知注册的委托做相应的处理,再通过isMemoryDownload变量判断是内存下载还是文件下载,从而为流变量ContentStream申请内存流或文件流空间。然后创建网络请求对象,并为请求对象指定用户代理、代理内容。然后利用网络请求对象依次获取请求响应和请求响应流,并将请求响应流中的内容提取出来(以1500字节为单位逐次提取)再写入到前面申请的流对象ContentStream的空间中去,接着调用OnProgressCallback和OnDebugCallback去通知注册的委托做相应的处理。最后调用OnDownloadEnded(this)方法转到注册的委托实例函数去做相关的处理。

方法private void HandleErrors()处理未被网络请求自身捕捉的异常

方法public void Verify()当出现异常时,通过调用该函数将会被抛出

方法private void SaveException( Exception exception )把下载错误异常信息写入日志文件

方法private void SetMapServerError()读取来子服务器的XML错误,抛出具有该信息的错误

方法public void Dispose()执行释放、清理或重置应用程序执行任务所定义的非托管资源

你可能感兴趣的:(download)