Example #1
0
 public static void EncryptFile(System.IO.FileInfo src, DirectoryInfo des)
 {
     try
     {
         if (File.Exists(src.FullName))
         {
             byte[] srcbyte = File.ReadAllBytes(src.FullName);
             byte[] retbyte;
             if (IsEncryptBatch)
             {
                 retbyte = ConfigEncrypt.Encrypt(srcbyte);
             }
             else
             {
                 retbyte = ConfigEncrypt.Decrypt(srcbyte);
             }
             string despath = des.FullName + "//" + src.Name;
             File.WriteAllBytes(despath, retbyte);
         }
     }
     catch (Exception e)
     {
         UnityEngine.Debug.LogError("加密文件出错" + e.Message);
     }
 }
Example #2
0
        public static void HandleConfigBundle()
        {
            string tempLuaDir = ConfigConst.tempconfigDir;

            if (Directory.Exists(tempLuaDir))
            {
                Directory.Delete(ConfigConst.tempconfigDir);
            }
            Directory.CreateDirectory(tempLuaDir);
            string sourceDir = ConfigConst.configDir;

            string[] files = Directory.GetFiles(sourceDir, "*", SearchOption.AllDirectories);
            int      len   = sourceDir.Length;

            if (sourceDir[len - 1] == '/' || sourceDir[len - 1] == '\\')
            {
                --len;
            }
            for (int j = 0; j < files.Length; j++)
            {
                if (files[j].Contains("DS_Store"))
                {
                    continue;
                }
                if (files[j].Contains("meta"))
                {
                    continue;
                }
                string str  = files[j].Remove(0, len);
                string dest = tempLuaDir + str;
                string dir  = Path.GetDirectoryName(dest);
                Directory.CreateDirectory(dir);
                byte[] srcbyte = System.Text.Encoding.UTF8.GetBytes(File.ReadAllText(files[j]));
                byte[] enbyte  = ConfigEncrypt.Encrypt(srcbyte);
                File.WriteAllBytes(dest, enbyte);
            }
            AssetDatabase.Refresh();
        }
Example #3
0
        string ReadZipFile(string fileName, bool isCacheBundle)
        {
            AssetBundle zipFile = null;
            string      content = string.Empty;

            byte[] buffer  = null;
            string zipName = null;

            using (CString.Block())
            {
                CString sb = CString.Alloc(256);
                sb.Append("config");
                int pos = fileName.LastIndexOf('/');

                if (pos > 0)
                {
                    sb.Append("_");
                    sb.Append(fileName, 0, pos).ToLower().Replace('/', '_');
                    fileName = fileName.Substring(pos + 1);
                }
                zipName = sb.ToString();

                configMap.TryGetValue(zipName, out zipFile);
            }
            var isHaveCache = false;

            if (zipFile == null)
            {
                isHaveCache = false;
                zipFile     = AssetBundle.LoadFromFile(ConfigConst.configResDir + "/" + zipName + Platform.AssetBundleExt);
                if (isCacheBundle)
                {
                    configMap[zipName] = zipFile;
                }
            }
            else
            {
                isHaveCache = true;
            }

            if (zipFile != null)
            {
#if UNITY_5 || UNITY_2017 || UNITY_2018
                TextAsset configCode = zipFile.LoadAsset <TextAsset>(fileName);
#else
                TextAsset configCode = zipFile.Load(fileName, typeof(TextAsset)) as TextAsset;
#endif

                if (configCode != null)
                {
                    buffer = configCode.bytes;
                    Resources.UnloadAsset(configCode);
                    byte[] decrypt = ConfigEncrypt.Decrypt(buffer);
                    content = System.Text.Encoding.UTF8.GetString(decrypt);
                }
                if (!isCacheBundle && !isHaveCache)
                {
                    zipFile.Unload(true);
                }
            }

            return(content);
        }
Example #4
0
        private IEnumerator AsynReadFile(string fileName, bool isCacheBundle)
        {
            AssetBundle zipFile = null;
            string      content = string.Empty;

            byte[] buffer  = null;
            string zipName = null;

            using (CString.Block())
            {
                CString sb = CString.Alloc(256);
                sb.Append("config");
                int pos = fileName.LastIndexOf('/');

                if (pos > 0)
                {
                    sb.Append("_");
                    sb.Append(fileName, 0, pos).ToLower().Replace('/', '_');
                    fileName = fileName.Substring(pos + 1);
                }
                zipName = sb.ToString();

                configMap.TryGetValue(zipName, out zipFile);
            }
            var isHaveCache = false;

            if (zipFile == null)
            {
                isHaveCache = false;
                AssetBundleCreateRequest assetBundleRequest;
                assetBundleRequest = AssetBundle.LoadFromFileAsync(ConfigConst.configResDir + "/" + zipName + Platform.AssetBundleExt);
                yield return(assetBundleRequest);

                if (assetBundleRequest.isDone)
                {
                    zipFile = assetBundleRequest.assetBundle;
                    if (isCacheBundle)
                    {
                        configMap[zipName] = zipFile;
                    }
                }
            }
            else
            {
                isHaveCache = true;
            }

            if (zipFile != null)
            {
                TextAsset configCode = null;
#if UNITY_5 || UNITY_2017 || UNITY_2018
                AssetBundleRequest assetBundleRequest;
                assetBundleRequest = zipFile.LoadAssetAsync <TextAsset>(fileName);
                yield return(assetBundleRequest);

                if (assetBundleRequest.isDone)
                {
                    configCode = (TextAsset)assetBundleRequest.asset;
                }
#else
                configCode = zipFile.Load(fileName, typeof(TextAsset)) as TextAsset;
#endif

                if (configCode != null)
                {
                    buffer = configCode.bytes;
                    Resources.UnloadAsset(configCode);
                    byte[] decrypt = ConfigEncrypt.Decrypt(buffer);
                    content = System.Text.Encoding.UTF8.GetString(decrypt);
                }
                if (!isCacheBundle && !isHaveCache)
                {
                    zipFile.Unload(true);
                }
                //回调
                if (CallBacks.ContainsKey(fileName))
                {
                    Action <string> action = CallBacks[fileName];
                    if (action != null)
                    {
                        Delegate[] actions = action.GetInvocationList();
                        foreach (var dele in actions)
                        {
                            var act = (Action <string>)dele;
                            try
                            {
                                act(content);
                            }
                            catch (Exception e)
                            {
                                Debuger.LogError("异步加载config文件出错 " + fileName + " " + e.Message);
                            }
                        }
                    }
                    CallBacks.Remove(fileName);
                }
                yield return(null);
            }
        }