Exemplo n.º 1
0
    public void SetFileLastModifyTime(string url, ref DateTime dt)
    {
        string          key           = CFileManager.GetMd5(url.ToLower());
        CCachedFileInfo cacheFileInfo = m_cachedFileInfoSet.GetFileInfo(key);

        if (cacheFileInfo != null)
        {
            cacheFileInfo.m_lastModifyTime = dt;
        }
    }
Exemplo n.º 2
0
    //--------------------------------------------------
    /// 添加数据
    /// @url
    /// @data
    //--------------------------------------------------
    public void AddFileInfo(string key, CCachedFileInfo cachedTextureInfo)
    {
        if (m_cachedFileInfoMap.ContainsKey(key))
        {
            return;
        }

        if (m_cachedFileInfos != null)
        {
            m_cachedFileInfoMap.Add(key, cachedTextureInfo);
            m_cachedFileInfos.Add(cachedTextureInfo);
        }
    }
Exemplo n.º 3
0
    //--------------------------------------------------
    /// 返回缓存文件信息
    /// @key
    //--------------------------------------------------
    public CCachedFileInfo GetFileInfo(string key)
    {
        CCachedFileInfo cachedFileInfo = null;

        if (m_cachedFileInfoMap.TryGetValue(key, out cachedFileInfo))
        {
            return(cachedFileInfo);
        }
        else
        {
            return(null);
        }
    }
Exemplo n.º 4
0
    //--------------------------------------------------
    /// 移除最早的数据
    /// @return key
    //--------------------------------------------------
    public string RemoveEarliestFileInfo()
    {
        if (m_cachedFileInfos == null || m_cachedFileInfos.Count <= 0)
        {
            return(null);
        }

        CCachedFileInfo removeCachedFileInfo = m_cachedFileInfos[0];

        m_cachedFileInfos.RemoveAt(0);
        m_cachedFileInfoMap.Remove(removeCachedFileInfo.m_key);

        return(removeCachedFileInfo.m_key);
    }
Exemplo n.º 5
0
    public DateTime GetFileLastModifyTime(string url)
    {
        string          key           = CFileManager.GetMd5(url.ToLower());
        CCachedFileInfo cacheFileInfo = m_cachedFileInfoSet.GetFileInfo(key);

        if (cacheFileInfo != null)
        {
            return(cacheFileInfo.m_lastModifyTime);
        }
        else
        {
            return(DateTime.MinValue);
        }
    }
Exemplo n.º 6
0
    //--------------------------------------
    /// 排序函数
    /// @按m_lastModifyTime升序排列
    //--------------------------------------
    public int CompareTo(object obj)
    {
        CCachedFileInfo cachedTextureInfo = obj as CCachedFileInfo;

        if (m_lastModifyTime > cachedTextureInfo.m_lastModifyTime)
        {
            return(1);
        }
        else if (m_lastModifyTime == cachedTextureInfo.m_lastModifyTime)
        {
            return(0);
        }
        else
        {
            return(-1);
        }
    }
Exemplo n.º 7
0
    //--------------------------------------------------
    /// 读出数据
    /// @buffer
    /// @offset
    /// @dataLength
    //--------------------------------------------------
    public int Read(byte[] buffer, int offset, uint dataLength)
    {
        m_cachedFileInfos.Clear();
        m_cachedFileInfoMap.Clear();

        //数据长度不合法,不能读取数据
        if (dataLength < 6 || offset + (int)dataLength > buffer.Length)
        {
            return(-1);
        }

        //校验数据长度
        int storedDataLength = CMemoryManager.ReadInt(buffer, ref offset);

        if (storedDataLength < 6 || storedDataLength != (int)dataLength)
        {
            return(-2);
        }

        //校验版本号
        int version = CMemoryManager.ReadShort(buffer, ref offset);

        if (version != c_version)
        {
            return(-3);
        }

        //读取数据
        int infoAmount = CMemoryManager.ReadShort(buffer, ref offset);

        for (int i = 0; i < infoAmount; i++)
        {
            CCachedFileInfo cacheFileInfo = new CCachedFileInfo();
            cacheFileInfo.Read(buffer, ref offset);

            //防止key重复
            if (m_cachedFileInfoMap.ContainsKey(cacheFileInfo.m_key) == false)
            {
                m_cachedFileInfoMap.Add(cacheFileInfo.m_key, cacheFileInfo);
                m_cachedFileInfos.Add(cacheFileInfo);
            }
        }
        //按最后修改时间排序
        m_cachedFileInfos.Sort();
        return(0);
    }
Exemplo n.º 8
0
    //--------------------------------------------------
    /// 获取缓存的资源文件路径
    /// @url        : 地址
    /// @validDays  : 有效天数
    //--------------------------------------------------
    public string GetCachedFilePath(string url, float validDays)
    {
        string key = CFileManager.GetMd5(url.ToLower());

        CCachedFileInfo cachedFileInfo = m_cachedFileInfoSet.GetFileInfo(key);

        //不存在
        if (cachedFileInfo == null)
        {
            return(string.Empty);
        }

        //检查是否过期
        if ((DateTime.Now - cachedFileInfo.m_lastModifyTime).TotalDays >= validDays)
        {
            RemoveFile(key);
            return(string.Empty);
        }

        string cachedFileFullPath = CFileManager.CombinePath(m_dir, key + m_fileExtension);

        //检查文件是否存在
        if (CFileManager.IsFileExist(cachedFileFullPath))
        {
            //通过校验文件长度,来判断是否被串改
            if (cachedFileInfo.m_fileLength == (int)CFileManager.GetFileLength(cachedFileFullPath))
            {
                return(cachedFileFullPath);
            }
            else
            {
                RemoveFile(key);
            }
        }

        return(string.Empty);
    }
Exemplo n.º 9
0
    //--------------------------------------------------
    /// 添加缓存文件
    /// @url
    /// @cacheType
    /// @width
    /// @height
    /// @isGif
    /// @data
    //--------------------------------------------------
    public void AddFile(string url, byte[] data, int tagInt1 = 0, int tagInt2 = 0, bool tagBool = false)
    {
        string key = CFileManager.GetMd5(url.ToLower());
        List <CCachedFileInfo> cachedFileInfoList = m_cachedFileInfoSet.m_cachedFileInfos;

        if (cachedFileInfoList == null)
        {
            return;
        }

        if (m_cachedFileInfoSet.m_cachedFileInfoMap.ContainsKey(key))
        {
            CCachedFileInfo cachedFileInfo = null;
            m_cachedFileInfoSet.m_cachedFileInfoMap.TryGetValue(key, out cachedFileInfo);

            Debug.Assert(cachedFileInfoList != null && cachedFileInfoList.Contains(cachedFileInfo), "zen me ke neng?");

            //修改信息
            cachedFileInfo.m_fileLength     = data.Length;
            cachedFileInfo.m_lastModifyTime = DateTime.Now;
            cachedFileInfo.m_tagInt1        = tagInt1;
            cachedFileInfo.m_tagInt2        = tagInt2;
            cachedFileInfo.m_tagBool        = tagBool;
        }
        else
        {
            //如果数量达到上限,移除排在最前面的文件
            if (cachedFileInfoList.Count >= m_maxCnt)
            {
                string removeKey = m_cachedFileInfoSet.RemoveEarliestFileInfo();

                //删除缓存文件
                if (!string.IsNullOrEmpty(removeKey))
                {
                    string removeCachedFileFullPath = CFileManager.CombinePath(m_dir, removeKey + m_fileExtension);
                    if (CFileManager.IsFileExist(removeCachedFileFullPath))
                    {
                        CFileManager.DeleteFile(removeCachedFileFullPath);
                    }
                }
            }

            CCachedFileInfo cachedFileInfo = new CCachedFileInfo();
            cachedFileInfo.m_key            = key;
            cachedFileInfo.m_fileLength     = data.Length;
            cachedFileInfo.m_lastModifyTime = DateTime.Now;
            cachedFileInfo.m_tagInt1        = tagInt1;
            cachedFileInfo.m_tagInt2        = tagInt2;
            cachedFileInfo.m_tagBool        = tagBool;

            m_cachedFileInfoSet.AddFileInfo(key, cachedFileInfo);
        }

        //排序
        m_cachedFileInfoSet.m_cachedFileInfos.Sort();

        //写入信息文件
        byte[] buffer = CFileManager.LockFileBuffer();
        try
        {
            MakeDirReady();
            int offset = 0;
            m_cachedFileInfoSet.Write(buffer, ref offset);

            if (CFileManager.IsFileExist(m_metaFilePath))
            {
                CFileManager.DeleteFile(m_metaFilePath);
            }

            CFileManager.WriteFile(m_metaFilePath, buffer, 0, offset);
        }
        finally
        {
            CFileManager.UnLockFileBuffer();
        }

        //写入数据文件
        string cachedFileFullPath = CFileManager.CombinePath(m_dir, key + m_fileExtension);

        if (CFileManager.IsFileExist(cachedFileFullPath))
        {
            CFileManager.DeleteFile(cachedFileFullPath);
        }

        CFileManager.WriteFile(cachedFileFullPath, data);
    }