private void ProcessNew(int poolIdx) { WWWRequestHandle curHandle = mRequestHandleQueue.Fetch(); if (curHandle != null) { string url = curHandle.Url; string hash = GetHash(curHandle.Type, curHandle.Url); if (mRequestHandleMap.ContainsKey(hash)) { //log return; } if (HasResource(curHandle.Type, curHandle.Url)) { curHandle.TrySuccessCallback(); } UnityWebRequest mWorkingWww = UnityWebRequest.Get(url); mWorkingWww.SendWebRequest(); mWWWObjMap.Add(hash, mWorkingWww); mRequestHandleMap.Add(hash, curHandle); mPool[poolIdx] = curHandle; } }
public WWWRequestHandle Abort(WWWRequestHandle handle) { //string hash = GetHash(handle.Type, handle.Url); //if (mRequestHandleMap.ContainsKey(hash)) //{ // mRequestHandleMap.Remove(hash); //} return(handle); }
public IWWWRequestHandle BuildRequest(WWWType type, string url) { WWWRequestHandle requestHandle; requestHandle = new WWWRequestHandle(this); requestHandle.SetType(type); requestHandle.SetUrl(url); return(requestHandle); }
public WWWRequestHandle SendRequest(WWWRequestHandle handle) { string hash = GetHash(handle.Type, handle.Url); if (mRequestHandleMap.ContainsKey(hash)) { mRequestHandleMap[hash] = handle; } mRequestHandleQueue.Push(handle); return(handle); }
public WWWRequestHandle RequestWWW(string url, Command cmd, MessageFunction completeCallback, MessageFunction errorCallback, int Id) { if (url == null) { DebugUtil.Error("ResourceManager::RequestWWW() url is null"); return(null); } WWWRequestHandle ret = new WWWRequestHandle(); ret.url = url; ret.cmd = cmd; ret.Id = Id; ret.completeCallback = completeCallback; ret.errorCallback = errorCallback; fetchingQueue.Add(ret); ret.m_LoadResTimeCost.Start(); return(ret); }
public WWWRequestHandle RequestWWW(string url, Command cmd, MessageFunction completeCallback, MessageFunction errorCallback) { if (url == null) { DebugUtil.Error("ResourceManager::RequestWWW() url is null"); return(null); } //DebugOutPut.Log("ResourceManager WWW at url: " + url, DebugLogLevel.LogLevel1); WWWRequestHandle ret = new WWWRequestHandle(); ret.url = url; ret.cmd = cmd; ret.completeCallback = completeCallback; ret.errorCallback = errorCallback; fetchingQueue.Add(ret); ret.m_LoadResTimeCost.Start(); return(ret); }
public void Abort(WWWRequestHandle handle) { if (handle == null) { return; } if (workingRequest == handle) { workingWWW.Dispose(); workingWWW = null; workingRequest = null; fetchingQueue.RemoveAt(0); } else { fetchingQueue.Remove(handle); } }
public float QueryProgress(WWWRequestHandle handle) { if (handle == null) { return(0); } if (workingRequest == handle) { return(workingWWW.progress); } else if (fetchingQueue.Contains(handle)) { return(0); } else { return(1); } }
private void _Create(Command cmd) { BaseUI ui = null; _dicUI.TryGetValue(cmd.UIType, out ui); if (ui != null) { //已加载 if (cmd.Listener != null) { cmd.Listener(ui); } if (cmd.lua_fun != null) { cmd.lua_fun.Call(ui.gameObject); } return; } else { if (AppConst.PrefabBundleMode && cmd.UIType != E_UIType.Fight && cmd.UIType != E_UIType.UILoadingPanel && cmd.UIType != E_UIType.PanelMessageBox && cmd.UIType != E_UIType.UILoginPanel) { string PrefabUrl = BundleResMgr.GetResourceURL(cmd.UIType.ToString(), "unity3d"); if (PrefabUrl == null) { DebugUtil.Error("Atlas [" + cmd.UIType.ToString() + "] is null!!!"); } WWWRequestHandle handle = BundleResMgr.Instance.RequestWWW(PrefabUrl, cmd, OnLoadUIFinished, null); } else { AppFacade.Instance.GetManager <ResourceMgr>(ManagerName.Resource).LoadAssetAndInstance(cmd.UIType.ToString(), (asset) => { OnLoadUIFinished(asset, cmd); }); } } }
//用来遍历 //private int CurPoolOffset; //protected WWWRequestHandle mWorkingRequest; //protected UnityWebRequest mWorkingWww; public void Update(float dTime) { for (int i = 0; i < PoolSize; i++) { WWWRequestHandle mRequestHanlde = mPool[i]; UnityWebRequest mUnityWebReq = null; if (mRequestHanlde != null) { if (mWWWObjMap.TryGetValue(GetHash(mRequestHanlde.Type, mRequestHanlde.Url), out mUnityWebReq)) { if (mUnityWebReq.isNetworkError || mUnityWebReq.isHttpError) { mRequestHanlde.TryFailCallback(); mPool[i] = null; mWWWObjMap.Remove(GetHash(mRequestHanlde.Type, mRequestHanlde.Url)); } else if (mUnityWebReq.isDone) { mRequestHanlde.TrySuccessCallback(); Debug.Log(mUnityWebReq.downloadHandler.text); GetHash(mRequestHanlde.Type, mRequestHanlde.Url); //缓存 mPool[i] = null; } } else { Debug.Log("no unity web obj found"); mRequestHanlde.TryFailCallback(); mPool[i] = null; } } else { ProcessNew(i); } } }
public void Update() { if (workingRequest == null) //not in downloading process { if (fetchingQueue.Count > 0) { //use tmp handle to clean status in resourcemanager first WWWRequestHandle tmp = fetchingQueue[0]; if (HasResource(tmp.url)) { fetchingQueue.RemoveAt(0); tmp.IsDone = true; if (tmp.completeCallback != null) { tmp.completeCallback(tmp, tmp.cmd); } tmp.m_LoadResTimeCost.Stop(); System.TimeSpan cost = tmp.m_LoadResTimeCost.Elapsed; string timecostdetial = string.Format("{0} Loaded,time cost: {1}", tmp.url, cost.TotalSeconds); DebugUtil.Info(timecostdetial); return; } workingRequest = tmp; workingWWW = new WWW(workingRequest.url); //DebugOutPut.Log("ResourceManager new WWW at url: " + workingRequest.url, DebugLogLevel.LogLevel1); } } else //currently downloading { if (workingWWW.error != null) { if (workingWWW.error.Contains("WWW request was cancelled")) //not an error { DebugUtil.Error("ResourceCanceled: " + workingWWW.url); workingWWW = null; workingRequest = null; fetchingQueue.RemoveAt(0); } else { DebugUtil.Error("WWW download has error: " + workingWWW.error + " url: " + workingWWW.url); //use tmp handle to clean status in resourcemanager first WWWRequestHandle tmp = workingRequest; workingWWW = null; workingRequest = null; fetchingQueue.RemoveAt(0); if (tmp.errorCallback != null) { tmp.errorCallback(tmp, tmp.cmd); } //throw new System.Exception(workingWWW.error + " : " + workingWWW.url); tmp.m_LoadResTimeCost.Stop(); System.TimeSpan cost = tmp.m_LoadResTimeCost.Elapsed; string timecostdetial = string.Format("{0} Loaded,time cost: {1}", tmp.url, cost.TotalSeconds); DebugUtil.Info(timecostdetial); } } else { if (workingWWW.isDone) { //DebugOutPut.Log("WWW download complete: " + workingWWW.url, DebugLogLevel.LogLevel1); workingRequest.IsDone = true; fetchedWWWMap[workingRequest.url] = workingWWW; workingWWW = null; //use tmp handle to clean status in resourcemanager first WWWRequestHandle tmp = workingRequest; workingRequest = null; fetchingQueue.RemoveAt(0); if (tmp.completeCallback != null) { tmp.completeCallback(tmp, tmp.cmd); } tmp.m_LoadResTimeCost.Stop(); System.TimeSpan cost = tmp.m_LoadResTimeCost.Elapsed; string timecostdetial = string.Format("{0} Loaded,time cost: {1}", tmp.url, cost.TotalSeconds); DebugUtil.Info(timecostdetial); } } } }
private void OnLoadUIFinished(object asset, Command cmd) { if (asset != null && cmd != null) { GameObject go = null; if (AppConst.PrefabBundleMode && cmd.UIType != E_UIType.Fight && cmd.UIType != E_UIType.UILoadingPanel && cmd.UIType != E_UIType.PanelMessageBox && cmd.UIType != E_UIType.UILoginPanel) { WWWRequestHandle handle = asset as WWWRequestHandle; AssetBundle bundle = handle.RetainAsAssetBundle(); GameObject LoadedRes = bundle.LoadAsset(cmd.UIType.ToString()) as GameObject; if (LoadedRes != null) { go = GameObject.Instantiate(LoadedRes) as GameObject; } } else { go = asset as GameObject; } go.SetActive(false); BaseUI ui = go.AddComponent(cmd.MonoType) as BaseUI; if (cmd.bLuaBehaviour) { go.AddComponent <LuaBehaviour>().OnInit(null); } ui.mUIType = cmd.UIType; go.name = ui.GetUIType().ToString(); _curUI = ui; if (ui.mUIStyle == E_UIStyle.BackClose) { _backSequence.Push(ui); } AddUI(ui); if (ui.mUIType == E_UIType.UILoadingPanel) { GameObject.DontDestroyOnLoad(go); } if (cmd.CommandType == Command.CmdType.CreateAndShow) { if (cmd.lua_fun != null) { ShowUI_LUA(cmd.UIType, cmd.lua_fun, cmd.IsCloseOtherUIs, cmd.CreateCanCall, cmd.Params); } else { ShowUI(cmd.UIType, cmd.MonoType, cmd.Listener, cmd.IsCloseOtherUIs, cmd.CreateCanCall, cmd.Params); } } else if (cmd.CreateCanCall && cmd.Listener != null) { cmd.Listener(ui); } else if (cmd.CreateCanCall && cmd.lua_fun != null) { cmd.lua_fun.Call(ui.gameObject); } //ui.CachedTransform.SetParent(UIContainer,false); ui.UIInit(); AddColliderBgForWindow(ui); LayerMgr.Instance.SetLayer(ui); } }
public void Push(WWWRequestHandle handle) { queue.Enqueue(handle); }