Ejemplo n.º 1
0
    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();
        }
    }
Ejemplo n.º 2
0
    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);
    }
Ejemplo n.º 3
0
    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);
        }
    }
Ejemplo n.º 4
0
    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);
    }
Ejemplo n.º 5
0
    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);
        });
    }
Ejemplo n.º 6
0
 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;
 }
Ejemplo n.º 7
0
 /// <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;
 }
Ejemplo n.º 8
0
    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);
        });
    }
Ejemplo n.º 9
0
    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);
        });
    }
Ejemplo n.º 10
0
    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);
        }
    }
Ejemplo n.º 11
0
 public static void Fetch(string url, int version, ResolveAction resolve)
 {
     instance._Fetch(url, version, resolve, 0);
 }
Ejemplo n.º 12
0
 void OnFetchFailed(string url, int version, ResolveAction resolve)
 {
     Debug.Log("Fetch Failed! " + url + " v." + version);
     resolve(fallbackTex);
 }
Ejemplo n.º 13
0
 public void Load(string url, int version, ResolveAction resolve, FallbackAction fallback)
 {
     corgi.StartCoroutine(DownloadURL(url, version, resolve, fallback));
 }
Ejemplo n.º 14
0
 void OnDiskFailed(string url, int version, ResolveAction resolve)
 {
     web.Load(url, version, resolve, fallback);
 }
Ejemplo n.º 15
0
 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);
 }
Ejemplo n.º 17
0
 public ResolveAllSameRules()
 {
     this.aAction = ResolveAction.UseLeft;
 }
Ejemplo n.º 18
0
        public ResolveAllSameRules <TDefinedFor> Action(ResolveAction action)
        {
            this.aAction = action;

            return(this);
        }
Ejemplo n.º 19
0
 public ResolveAllSame(ResolveAction action)
 {
     this.aAction = action;
 }