/// <summary> /// 下载进度回调 /// </summary> public void ProcessDelegateHandle(LoadRequest request) { if (request.processFunction != null) { int count = request.processFunction.GetInvocationList().GetLength(0); for (int i = 0; i < count; i++) { LoadRequest.ProcessDelegate processFunc = (LoadRequest.ProcessDelegate)request.processFunction.GetInvocationList()[i]; try { processFunc.Invoke(request.wwwObject.progress, request.wwwObject.bytesDownloaded); } catch (Exception e) { Debug.LogWarning("exception:" + e.Message); } } } }
/// <summary> /// 读取资源 /// </summary> public void Load(string url, LoadRequest.DownCompleteDelegate completeFunc, object customParam = null, string fileType = "", int priority = 2, LoadRequest.ErrorDelegate errorFunc = null, LoadRequest.ProcessDelegate processFunc = null) { url = url.Trim(); if (string.IsNullOrEmpty(url)) { return; } if (completeDict.ContainsKey(url)) { // 已下载资源,直接调用回调函数 if (customParam != null) { completeDict[url].param = customParam; } try { completeFunc.Invoke(completeDict[url]); } catch (Exception exception) { Debug.LogWarning("exception:" + exception.Message); } } else if (loadDict.ContainsKey(url)) { // 已经提交相同请求,但是没有下载完成 loadDict[url].completeFunction += completeFunc; loadDict[url].processFunction += processFunc; loadDict[url].errorFunction += errorFunc; loadDict[url].customParams.Add(customParam); } else if (waitDict.ContainsKey(url)) { // 已经提交相同请求,但是还没轮到加载 loadDict[url].completeFunction += completeFunc; loadDict[url].processFunction += processFunc; loadDict[url].errorFunction += errorFunc; loadDict[url].customParams.Add(customParam); } else { // 未加载过的 if (loadDict.Count < MAX_LOAD_REQUEST) { isLoading = true; LoadRequest loadRequest = new LoadRequest(url, customParam, fileType, completeFunc, errorFunc, processFunc); if (customParam != null && customParam.GetType().ToString() == "System.Collections.Generic.List`1[System.Object]") { loadRequest.customParams = (List <object>)customParam; } loadDict.Add(url, loadRequest); } else { // 已达到最大加载数目,加入等待队列 LoadRequest loadRequest = new LoadRequest(); loadRequest.requestURL = url; loadRequest.completeFunction = completeFunc; loadRequest.errorFunction = errorFunc; loadRequest.processFunction = processFunc; loadRequest.customParams.Add(customParam); loadRequest.fileType = fileType; loadRequest.priotiry = priority; waitDict.Add(url, loadRequest); priorityList.Add(url); //maxx-m //priorityList = priorityList.OrderBy(s => waitDict[s].priotiry).ToList(); } } }