/// <summary> /// 生成md5文本文件 /// </summary> static void BuildFileIndex() { string resPath = Application.dataPath + "/StreamingAssets/"; ///----------------------创建文件列表----------------------- string newFilePath = resPath + "/files.txt"; if (File.Exists(newFilePath)) { File.Delete(newFilePath); } paths.Clear(); files.Clear(); Recursive(resPath); FileStream fs = new FileStream(newFilePath, FileMode.CreateNew); StreamWriter sw = new StreamWriter(fs); for (int i = 0; i < files.Count; i++) { string file = files[i]; string ext = Path.GetExtension(file); if (file.EndsWith(".meta") || file.Contains(".DS_Store")) { continue; } string md5 = LuaConst.md5file(file); string value = file.Replace(resPath, string.Empty); sw.WriteLine(value + "|" + md5); } sw.Close(); fs.Close(); }
public void Initialize() { Lua = new LuaEnv(); Lua.AddBuildin("rapidjson", XLua.LuaDLL.Lua.LoadRapidJson); if (LuaConst.DebugMode == true) { string path = Application.dataPath + "/XLua/EasyXLua/ToBuild/lua/"; GetAllFiles(new DirectoryInfo(path)); } else { if (LuaConst.LuaBundleMode) { string uri = LuaConst.DataPath + "Lua.medsci"; byte[] stream = File.ReadAllBytes(uri); AssetBundle bundle = AssetBundle.LoadFromMemory(stream); TextAsset[] TA = bundle.LoadAllAssets <TextAsset>(); foreach (TextAsset t in TA) { string luaDecrypt = LuaConst.Decrypt(t.text, "12345678", "56781234"); LuaDict.Add(t.name, System.Text.Encoding.UTF8.GetBytes(luaDecrypt)); } } else { string path = LuaConst.DataPath + "/lua/"; GetAllFiles(new DirectoryInfo(path)); } } XLua.LuaEnv.CustomLoader CL = new XLua.LuaEnv.CustomLoader(GetLuaFiles); Lua.AddLoader(CL); }
/// <summary> /// 生成资源map /// </summary> static void AddBuildMap(string bundleName, string pattern, string path) { string[] files = Directory.GetFiles(path, pattern, SearchOption.AllDirectories); if (files.Length == 0) { return; } for (int i = 0; i < files.Length; i++) { files[i] = files[i].Replace('\\', '/'); if (bundleName == "Lua.medsci") { string luafile = File.ReadAllText(files[i]); files[i] = files[i].Replace("/XLua/EasyXLua/ToBuild/Lua", "/XLua/EasyXLua/ToBuild/LuaEncrypt"); try { if (File.Exists(files[i])) { File.Delete(files[i]); } if (!Directory.Exists(Path.GetDirectoryName(files[i]))) { Directory.CreateDirectory(Path.GetDirectoryName(files[i])); } FileStream fs = File.Create(files[i]); byte[] temp = System.Text.Encoding.UTF8.GetBytes(LuaConst.Encrypt(luafile, "12345678", "56781234")); fs.Write(temp, 0, temp.Length); fs.Close(); } catch (Exception e) { Debug.LogError(e); } } } AssetBundleBuild build = new AssetBundleBuild(); build.assetBundleName = bundleName; build.assetNames = files; maps.Add(build); }
/// <summary> /// 是否要更新? /// </summary> IEnumerator OnCheckUpdateResource() { if (!LuaConst.UpdateMode) { OnResourceInited(); yield break; } string dataPath = LuaConst.DataPath; //数据目录 string url = LuaConst.WedUrl; string message = string.Empty; string random = DateTime.Now.ToString("yyyymmddhhmmss"); string listUrl = url + "files.txt?v=" + random; Debug.LogWarning("LoadUpdate---->>>" + listUrl); WWW www = new WWW(listUrl); yield return(www); if (www.error != null) { OnResourceInited(); Debug.Log("连接更新服务器失败"); yield return(new WaitForSeconds(1.5f)); yield break; } if (!Directory.Exists(dataPath)) { Directory.CreateDirectory(dataPath); } File.WriteAllBytes(dataPath + "files.txt", www.bytes); string filesText = www.text; string[] files = filesText.Split('\n'); for (int i = 0; i < files.Length; i++) { if (string.IsNullOrEmpty(files[i])) { continue; } string[] keyValue = files[i].Split('|'); string f = keyValue[0]; string localfile = (dataPath + f).Trim(); string path = Path.GetDirectoryName(localfile); if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } string fileUrl = url + f + "?v=" + random; bool canUpdate = !File.Exists(localfile); if (!canUpdate) { string remoteMd5 = keyValue[1].Trim(); string localMd5 = LuaConst.md5file(localfile); canUpdate = !remoteMd5.Equals(localMd5); if (canUpdate) { File.Delete(localfile); } } if (canUpdate) { willDownLoadUrl.Add(fileUrl); //下载地址 willDownLoadDestination.Add(localfile); //目标文件路径 totalSize += GetHttpLength(fileUrl); } } if (willDownLoadUrl.Count > 0) { double tokbsize = Math.Round((float)totalSize / 1024, 2); Debug.Log("是否要下载文件大小为" + tokbsize); CommonUI.Instance.ShowCheck("是否更新", () => StartCoroutine(UpdateResources()), () => OnResourceInited()); //TODO } else { CommonUI.Instance.ShowTips("已是最新版本"); Debug.Log("已经是最新版本"); OnResourceInited(); } }