示例#1
0
    public void UnCompress()
    {
        byte[] temp = GZipFileUtil.Uncompress(Bytes);

        Clear();
        WriteBytes(temp);
    }
示例#2
0
    public static void LoadABFileInfo(System.Action OnComplete)
    {
        _onABFileLoaded    = OnComplete;
        _abAssetPathDic    = new Dictionary <string, string>();
        _assetDic          = new Dictionary <string, object>();
        _abDic             = new Dictionary <string, AssetBundle>();
        _loadingABCountDic = new Dictionary <string, uint>();
        _loadedTask        = new List <LoadTask>();
        _taskDic           = new Dictionary <System.Action <object>, LoadTask>();
        _unloadABList      = new List <string>();

        //加载resouce资源路径与ab路径对照表
        string relativeUrl = AssetPathUtil.PlatformString + "/abfile.bytes";

        GetBinaryResource(relativeUrl, (object content) => {
            byte[] data        = GZipFileUtil.Uncompress(content as byte[]);
            string dataStr     = Encoding.UTF8.GetString(data);
            string[] fileInfos = dataStr.Split(new string[] { "\n" }, StringSplitOptions.None);
            foreach (string fileInfo in fileInfos)
            {
                string[] abResArr = fileInfo.Split(':');
                if (abResArr.Length > 1)
                {
                    _abAssetPathDic.Add(abResArr[0], abResArr[1]);
                }
            }
            OnComplete.Invoke();
        });
    }
    /// <summary>
    /// 解析本地版本文件
    /// </summary>
    /// <param name="bytes"></param>
    public static void ParseLocalVersionFile(byte[] bytes)
    {
        byte[] rawBytes = GZipFileUtil.Uncompress(bytes);
        string dataStr  = Encoding.UTF8.GetString(rawBytes);

        _localFileDic = new Dictionary <string, FileVerInfo>();
        _cacheFileDic = new Dictionary <string, FileVerInfo>();
        string[] splitStr     = new string[] { "\n" };
        string[] data         = dataStr.Split(splitStr, StringSplitOptions.None);
        char[]   fileVerSplit = new char[] { ':', '|' };
        foreach (string fileVerStr in data)
        {
            string[] fileVer = fileVerStr.Split(fileVerSplit);
            if (fileVer.Length < 3)
            {
                continue;
            }
            FileVerInfo info = new FileVerInfo();
            info.relativePath = fileVer[0];
            info.absolutePath = Path.Combine(AssetPathUtil.StreamingAssetPath, info.relativePath);
            info.md5Code      = fileVer[1];
            info.size         = uint.Parse(fileVer[2]);
            _localFileDic.Add(info.relativePath, info);
        }
    }
示例#4
0
 public static ReceivePackage ParseCmd(ByteArray byteArr)
 {
     uint len1 = byteArr.ReadUnsignedByte();
     uint len2 = byteArr.ReadUnsignedByte();
     uint len3 = byteArr.ReadUnsignedByte();
     uint packBodyLen = len1 | len2 << 8 | len3 << 16;
     bool isCompress = byteArr.ReadUnsignedByte() == 1;
     //
      uint cmdID = byteArr.ReadUnsignedShort();
     if (packBodyLen == 2)
         return new ReceivePackage((int)cmdID);
     byte[] packBody = new byte[packBodyLen - 2];
     byteArr.ReadBytes(packBody, packBody.Length);
     if (isCompress)
         packBody = GZipFileUtil.Uncompress(packBody);
     MemoryStream stream = new MemoryStream();
     stream.Write(packBody, 0, packBody.Length);
     stream.Position = 0;
     return new ReceivePackage((int)cmdID, stream);
 }
示例#5
0
    public static T ParseCmd<T>(byte[] bytes)
    {
        ByteArray byteArr = new ByteArray();
        byteArr.WriteBytes(bytes);
        uint len1 = byteArr.ReadUnsignedByte();
        uint len2 = byteArr.ReadUnsignedByte();
        uint len3 = byteArr.ReadUnsignedByte();
        uint packBodyLen = len1 | len2 << 8 | len3 << 16;
        bool isCompress = byteArr.ReadUnsignedByte() == 1;
        //
        uint cmdID = byteArr.ReadUnsignedShort();
        byte[] packBody = new byte[packBodyLen - 2];
        byteArr.ReadBytes(packBody, packBody.Length);
        if (isCompress)
            packBody = GZipFileUtil.Uncompress(packBody);

        MemoryStream stream = new MemoryStream();
        stream.Write(packBody, 0, packBody.Length);
        stream.Position = 0;

        return ProtoBuf.Serializer.Deserialize<T>(stream);
    }
    /// <summary>
    /// 解析CDN版本文件获取热更新文件表
    /// </summary>
    /// <param name="bytes"></param>
    public static List <FileVerInfo> ParseRemoteVersionFile(byte[] bytes)
    {
        List <FileVerInfo> downLoadList = new List <FileVerInfo>();

        byte[] rawBytes = GZipFileUtil.Uncompress(bytes);
        string dataStr  = Encoding.UTF8.GetString(rawBytes);

        string[] splitStr     = new string[] { "\n" };
        string[] data         = dataStr.Split(splitStr, StringSplitOptions.None);
        char[]   fileVerSplit = new char[] { ':', '|' };
        foreach (string fileVerStr in data)
        {
            string[] fileVer = fileVerStr.Split(fileVerSplit);
            if (fileVer.Length < 3)
            {
                continue;
            }
            FileVerInfo info = new FileVerInfo();
            info.relativePath = fileVer[0];
            info.absolutePath = AssetPathUtil.PersistentDataPath + info.relativePath;
            info.md5Code      = fileVer[1];
            info.size         = uint.Parse(fileVer[2]);

            if (_localFileDic.ContainsKey(info.relativePath))
            {
                FileVerInfo localFileInfo = _localFileDic[info.relativePath];
                if (localFileInfo.md5Code != info.md5Code)
                {
                    downLoadList.Add(info);
                }
            }
            else
            {
                downLoadList.Add(info);
            }
        }
        return(downLoadList);
    }