void _Fetch(string url, int version, ResolveAction resolve) { EnsureMainthread(); if (cacheState == CorgiCacheState.None || cacheState == CorgiCacheState.EndFetching) { if (cacheState == CorgiCacheState.None) { handles[url] = new CacheHandle(); } memory.Load(url, version, resolve, OnMemoryFaield); } else { var handle = handles[url]; new Thread(() => { handle.waitEvent.WaitOne(2000); mainThreadTasks.Add(() => { memory.Load(url, version, resolve, OnMemoryFaield); }); }).Start(); } }
public void Load(string url, int version, ResolveAction resolve, FallbackAction fallback) { CorgiMemoryChunk chunk = null; if (data.TryGetValue(url, out chunk)) { if (chunk.version >= version) { queue.Remove(chunk.url); queue.AddFirst(chunk.url); resolve(chunk.tex); return; } else { queue.Remove(chunk.url); RemoveChunk(chunk); } } ResolveAction newResolve = (tex) => { Debug.Log("memory new resolved!"); resolve(tex); Save(tex, url, version); }; fallback(url, version, newResolve); }
IEnumerator DownloadLocal(CorgiDiskChunk chunk, ResolveAction resolve, FallbackAction fallback) { var realPath = Path.Combine(Application.temporaryCachePath, chunk.path); var www = new WWW("file:///" + realPath); Debug.Log("path=" + "file:///" + realPath); yield return(www); if (!string.IsNullOrEmpty(www.error)) { Debug.Log("[ERR]" + www.error + "\n" + chunk.url + " " + chunk.path); RemoveChunk(chunk); fallback(chunk.url, chunk.version, (bytes, tex) => { Save(bytes, chunk.url, chunk.version); resolve(bytes, tex); }); } else { Debug.Log("Disk hit"); Texture2D tex = new Texture2D(0, 0); www.LoadImageIntoTexture(tex); resolve(null, tex); } }
public void Load(string url, int version, ResolveAction resolve, FallbackAction fallback) { CorgiDiskChunk chunk = null; if (map.TryGetValue(url, out chunk)) { if (chunk.version >= version) { queue.Remove(chunk.url); queue.AddFirst(chunk.url); StartCoroutine(DownloadLocal(chunk, resolve, fallback)); return; } else { queue.Remove(chunk.url); RemoveChunk(chunk); } } ResolveAction newResolve = (tex) => { Save(tex, url, version); resolve(tex); }; fallback(url, version, newResolve); }
public void Load(string url, int version, ResolveAction resolve, FallbackAction fallback) { CorgiDiskChunk chunk = null; if (chunkData.TryGetValue(url, out chunk)) { if (version >= 0 && chunk.version >= version) { chunkPriorityQueue.Remove(chunk.url); chunkPriorityQueue.AddFirst(chunk.url); corgi.StartCoroutine(DownloadLocal(chunk, resolve, fallback)); return; } else { chunkPriorityQueue.Remove(chunk.url); RemoveChunk(chunk); } } fallback(url, version, (bytes, tex) => { Save(bytes, url, version); resolve(bytes, tex); }); }
public void ResolveConflict(IDiffItemConflicted conflict, ResolveAction resolve) { if (this.aFinished) { throw new Exception("Cannot do this action on finished conflict resolver"); } this.aResolveActions[conflict] = resolve; }
/// <summary> /// Parameterized Constructor /// </summary> /// <param name="resolveaction">Resolve Action</param> /// <param name="resolvebasefile">Base File</param> /// <param name="resolvefromfile">From File</param> /// <param name="resolvestartfromrev">Start From Revision</param> /// <param name="resolveendfromrev">End From Revision</param> public FileResolveAction (ResolveAction resolveaction, FileSpec resolvebasefile, FileSpec resolvefromfile, int resolvestartfromrev, int resolveendfromrev) { ResolveAction = resolveaction; ResolveBaseFile = resolvebasefile; ResolveFromFile = resolvefromfile; ResolveStartFromRev = resolvestartfromrev; ResolveEndFromRev = resolveendfromrev; }
void _Fetch(string url, int version, ResolveAction resolve, int layerIndex) { if (layerIndex >= corgiLayers.Count) { fallbackDelegate(url, version, resolve); return; } corgiLayers[layerIndex].Load(url, version, resolve, (_url, _version, _resolve) => { _Fetch(_url, _version, _resolve, layerIndex + 1); }); }
public void Load(string url, int version, ResolveAction resolve, FallbackAction fallback) { CorgiMemoryChunk chunk = null; if (chunkData.TryGetValue(url, out chunk)) { // 아래 레이어에서 로드중인데 계속 요청이 들어오면 해당 key resolveQueue에 저장했다가 완료시 한꺼번에 호출 if (chunk == null) { Debug.Log("fetch pending.. " + url + " v." + version); ResolveAction delegates; if (resolveQueues.TryGetValue(url, out delegates)) { delegates += resolve; } else { resolveQueues.Add(url, resolve); } return; } else if (version >= 0 && chunk.version >= version) { chunkPriorityQueue.Remove(chunk.url); chunkPriorityQueue.AddFirst(chunk.url); resolve(null, chunk.tex); return; } else { chunkPriorityQueue.Remove(chunk.url); RemoveChunk(chunk); } } //아래 레이어에서 로드중인경우 체크용으로 해당 key chunk에 null을 넣어둔다. chunkData.Add(url, null); fallback(url, version, (bytes, tex) => { resolve(bytes, tex); OnResolve(url, version, tex); }); }
IEnumerator DownloadURL(string url, int version, ResolveAction resolve, FallbackAction fallback) { var www = new WWW(url); yield return(www); if (string.IsNullOrEmpty(www.error)) { Debug.Log("Web hit"); Texture2D tex = new Texture2D(0, 0); www.LoadImageIntoTexture(tex); resolve(www.bytes, tex); } else { Debug.Log("Web Failed!"); fallback(url, version, resolve); } }
public static void Fetch(string url, int version, ResolveAction resolve) { instance._Fetch(url, version, resolve, 0); }
void OnFetchFailed(string url, int version, ResolveAction resolve) { Debug.Log("Fetch Failed! " + url + " v." + version); resolve(fallbackTex); }
public void Load(string url, int version, ResolveAction resolve, FallbackAction fallback) { corgi.StartCoroutine(DownloadURL(url, version, resolve, fallback)); }
void OnDiskFailed(string url, int version, ResolveAction resolve) { web.Load(url, version, resolve, fallback); }
void OnMemoryFaield(string url, int version, ResolveAction resolve) { disk.Load(url, version, resolve, OnDiskFailed); }
/// <summary> /// Sets the <see cref="Action"/> property to the specified value and /// returns this <see cref="ResolveCommand"/> instance. /// </summary> /// <param name="value"> /// The new value for the <see cref="Action"/> property. /// </param> /// <returns> /// This <see cref="ResolveCommand"/> instance. /// </returns> /// <remarks> /// This method is part of the fluent interface. /// </remarks> public ResolveCommand WithAction(ResolveAction value) { Action = value; return(this); }
public ResolveAllSameRules() { this.aAction = ResolveAction.UseLeft; }
public ResolveAllSameRules <TDefinedFor> Action(ResolveAction action) { this.aAction = action; return(this); }
public ResolveAllSame(ResolveAction action) { this.aAction = action; }