コード例 #1
0
ファイル: CorgiDisk.cs プロジェクト: realityreflection/ccorgi
    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);
        });
    }
コード例 #2
0
ファイル: CorgiDisk.cs プロジェクト: realityreflection/ccorgi
    public void Save(byte[] bytes, string url, int version)
    {
        if (bytes == null || bytes.Length == 0)
        {
            return;
        }

        Debug.Log("Corgi Save " + url + " v." + version);
        //var bytes = tex.GetRawTextureData();
        var path = Path.GetRandomFileName();
        var size = bytes.Length;

        chunkData[url] = new CorgiDiskChunk()
        {
            url = url, version = version, path = path, size = size
        };
        chunkPriorityQueue.AddFirst(url);
        useSize += size;
        SaveFile(path, bytes);
        while (capacity < useSize)
        {
            RemoveLastChunk();
        }

        SaveCorgiDiskData();
    }
コード例 #3
0
ファイル: CorgiDisk.cs プロジェクト: realityreflection/ccorgi
    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);
        }
    }
コード例 #4
0
ファイル: CorgiDisk.cs プロジェクト: pjc0247/ccorgi
    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);
    }
コード例 #5
0
ファイル: CorgiDisk.cs プロジェクト: realityreflection/ccorgi
    private void RemoveChunk(CorgiDiskChunk chunk)
    {
        Debug.Log("Remove Chunk" + chunk.url);
        var realPath = Path.Combine(Application.temporaryCachePath, chunk.path);

        useSize -= chunk.size;
        chunkData.Remove(chunk.url);
        var t = new System.Threading.Thread(() =>
        {
            if (File.Exists(realPath))
            {
                File.Delete(realPath);
            }
        });

        t.Start();
    }
コード例 #6
0
ファイル: CorgiDisk.cs プロジェクト: pjc0247/ccorgi
    public void Save(Texture2D tex, string url, int version)
    {
        var bytes = tex.GetRawTextureData();
        var path  = Path.GetRandomFileName();
        var size  = bytes.Length;

        map[url] = new CorgiDiskChunk()
        {
            url = url, version = version, path = path, size = size
        };
        queue.AddFirst(url);
        useSize += size;
        SaveFile(path, bytes);
        while (capacity < useSize)
        {
            RemoveLastChunk();
        }
    }