public IEnumerator Download(ProcedureSystem system) { // 如果跳过CDN服务器 if (PatchManager.Instance.SkipCDN) { PatchManager.Log(ELogType.Warning, $"Skip CDN server !"); system.Switch((int)EPatchStates.PatchOver); yield break; } // 获取最新的游戏版本号 { string url = $"{PatchManager.Instance.StrWebServerIP}/GameVersion.php"; PatchManager.Log(ELogType.Log, $"Request game version : {url}"); WebPostRequest download = new WebPostRequest(url); download.PostContent = PatchManager.Instance.AppVersion.ToString(); yield return(download.DownLoad()); //Check fatal if (download.States != EWebRequestStates.Succeed) { download.Dispose(); system.Switch((int)EPatchStates.PatchError); yield break; } string version = download.GetResponse(); PatchManager.Instance.InitGameVesion(version); download.Dispose(); } int newResourceVersion = PatchManager.Instance.GameVersion.Revision; int oldResourceVersion = PatchManager.Instance.SandboxPatchFile.Version; // 检测是否需要重新下载安装包 if (PatchManager.Instance.GameVersion.Major != PatchManager.Instance.AppVersion.Major || PatchManager.Instance.GameVersion.Minor != PatchManager.Instance.AppVersion.Minor) { PatchManager.Log(ELogType.Log, $"Found new APP can be install : {PatchManager.Instance.GameVersion.ToString()}"); PatchManager.SendFoundNewAPPMsg(PatchManager.Instance.GameVersion.ToString()); yield break; } // 检测是否需要下载热更文件 if (newResourceVersion == oldResourceVersion) { PatchManager.Log(ELogType.Log, $"Not found file to download."); system.Switch((int)EPatchStates.PatchOver); } else { PatchManager.Log(ELogType.Log, $"Found new file to download : {newResourceVersion.ToString()}"); system.SwitchNext(); } }
private IEnumerator DownLoad(ProcedureSystem system) { // 解析APP里的补丁文件 string filePath = AssetPathHelper.MakeStreamingLoadPath(PatchDefine.StrPatchFileName); string url = AssetPathHelper.ConvertToWWWPath(filePath); WebDataRequest downloader = new WebDataRequest(url); yield return(downloader.DownLoad()); if (downloader.States == EWebRequestStates.Succeed) { PatchManager.Log(ELogType.Log, "Parse app patch file."); PatchManager.Instance.ParseAppPatchFile(downloader.GetText()); downloader.Dispose(); system.SwitchNext(); } else { throw new System.Exception($"Fatal error : Failed download file : {url}"); } }
/// <summary> /// 第五阶段 /// </summary> public IEnumerator Download(ProcedureSystem system) { // 从网络上解析最新的补丁文件 int newResourceVersion = PatchManager.Instance.GameVersion.Revision; string url = PatchManager.MakeWebDownloadURL(newResourceVersion.ToString(), PatchDefine.StrPatchFileName); WebDataRequest download = new WebDataRequest(url); yield return(download.DownLoad()); // Check fatal if (download.States != EWebRequestStates.Succeed) { download.Dispose(); system.Switch((int)EPatchStates.PatchError); yield break; } // 解析补丁文件 PatchManager.Log(ELogType.Log, $"Parse web patch file."); PatchManager.Instance.ParseWebPatchFile(download.GetText()); download.Dispose(); system.SwitchNext(); }
public IEnumerator Download(ProcedureSystem system) { // 注意:等所有文件下载完毕后,再替换版本文件 int newResourceVersion = PatchManager.Instance.GameVersion.Revision; string url = PatchManager.MakeWebDownloadURL(newResourceVersion.ToString(), PatchDefine.StrPatchFileName); string savePath = AssetPathHelper.MakePersistentLoadPath(PatchDefine.StrPatchFileName); WebFileRequest download = new WebFileRequest(url, savePath); yield return(download.DownLoad()); if (download.States != EWebRequestStates.Succeed) { download.Dispose(); system.Switch((int)EPatchStates.PatchError); yield break; } else { PatchManager.Log(ELogType.Log, "Download web files is finish."); download.Dispose(); system.SwitchNext(); } }
public FsmParseSandboxPatchFile(ProcedureSystem system) : base((int)EPatchStates.ParseSandboxPatchFile) { _system = system; }
public IEnumerator Download(ProcedureSystem system) { // 检测磁盘空间不足 // TODO 检测磁盘空间不足 // 计算下载文件的总大小 int totalDownloadCount = PatchManager.Instance.DownloadList.Count; long totalDownloadSizeKB = 0; foreach (var element in PatchManager.Instance.DownloadList) { totalDownloadSizeKB += element.SizeKB; } // 开始下载列表里的所有资源 PatchManager.Log(ELogType.Log, $"Begine download web files : {PatchManager.Instance.DownloadList.Count}"); long currentDownloadSizeKB = 0; int currentDownloadCount = 0; foreach (var element in PatchManager.Instance.DownloadList) { // 注意:资源版本号只用于确定下载路径 string url = PatchManager.MakeWebDownloadURL(element.Version.ToString(), element.Name); string savePath = AssetPathHelper.MakePersistentLoadPath(element.Name); element.SavePath = savePath; PatchManager.CreateFileDirectory(savePath); // 创建下载器 WebFileRequest download = new WebFileRequest(url, savePath); yield return(download.DownLoad()); //文件依次加载(在一个文件加载完毕后加载下一个) PatchManager.Log(ELogType.Log, $"Web file is done : {url}"); // 检测是否下载失败 if (download.States != EWebRequestStates.Succeed) { _system.Switch((int)EPatchStates.PatchError); PatchManager.SendWebFileDownloadFailedMsg(url); yield break; } // 立即释放加载器 download.Dispose(); currentDownloadCount++; currentDownloadSizeKB += element.SizeKB; PatchManager.SendDownloadFilesProgressMsg(totalDownloadCount, currentDownloadCount, totalDownloadSizeKB, currentDownloadSizeKB); } // 验证下载文件的MD5 foreach (var element in PatchManager.Instance.DownloadList) { string md5 = HashUtility.FileMD5(element.SavePath); if (md5 != element.MD5) { _system.Switch((int)EPatchStates.PatchError); PatchManager.Log(ELogType.Error, $"Web file md5 verification error : {element.Name}"); PatchManager.SendWebFileMD5VerifyFailedMsg(element.Name); yield break; } } // 最后清空下载列表 PatchManager.Instance.DownloadList.Clear(); _system.SwitchNext(); }
public FsmDownloadWebFiles(ProcedureSystem system) : base((int)EPatchStates.DownloadWebFiles) { _system = system; }
public FsmPatchOver(ProcedureSystem system) : base((int)EPatchStates.PatchOver) { _system = system; }
public FsmPatchPrepare(ProcedureSystem system) : base((int)EPatchStates.PatchPrepare) { _system = system; }
public FsmCheckSandboxDirty(ProcedureSystem system) : base((int)EPatchStates.CheckSandboxDirty) { _system = system; }
private void Awake() { Instance = this; DontDestroyOnLoad(gameObject); FrameRate = m_FrameRate; TimeScale = m_TimeScale; RunInBackground = m_RunInBackground; SleepTimeout = m_SleepTimeout; if (!string.IsNullOrEmpty(m_LoggerTypeName)) { Type loggerType = Type.GetType(m_LoggerTypeName); ILogger logger = (ILogger)Activator.CreateInstance(loggerType); LogSystem = SystemManager.RegisterSystem(new LogSystem(logger)); LogSystem.LogLevel = m_LogLevel; LogSystem.TraceColor = ColorUtility.ToHtmlStringRGBA(m_TraceLogColor); LogSystem.DebugColor = ColorUtility.ToHtmlStringRGBA(m_DebugLogColor); LogSystem.InfoColor = ColorUtility.ToHtmlStringRGBA(m_InfoLogColor); LogSystem.WarnColor = ColorUtility.ToHtmlStringRGBA(m_WarnLogColor); LogSystem.ErrorColor = ColorUtility.ToHtmlStringRGBA(m_ErrorLogColor); LogSystem.FatalColor = ColorUtility.ToHtmlStringRGBA(m_FatalLogColor); } if (m_LuaPackagePaths != null) { for (int i = 0; i < m_LuaPackagePaths.Length; ++i) { m_LuaPackagePaths[i] = GetPath(m_LuaPackagePaths[i]); } } if (!string.IsNullOrEmpty(m_ResourceHolderTypeName) && !string.IsNullOrEmpty(m_ResourceDecoderTypeName)) { Type holderType = Type.GetType(m_ResourceHolderTypeName); IResourceHolder holder = (IResourceHolder)Activator.CreateInstance(holderType); Type decoderType = Type.GetType(m_ResourceDecoderTypeName); IResourceDecoder decoder = (IResourceDecoder)Activator.CreateInstance(decoderType); Type dependencyType = Type.GetType(m_ResourceDependencyManifestTypeName); IDependencyManifest dependencyManifest = (IDependencyManifest)Activator.CreateInstance(dependencyType); ResourceSystem = SystemManager.RegisterSystem(new ResourceSystem(m_ResourceLoaderComponent, holder, decoder, dependencyManifest)); ResourceSystem.EditorPath = GetPath(m_EditorPath); ResourceSystem.InternalPath = GetPath(m_InternalPath); ResourceSystem.ReadOnlyPath = GetPath(m_ReadOnlyPath); ResourceSystem.PersistentPath = GetPath(m_PersistentPath); } LuaSystem = SystemManager.RegisterSystem(new LuaSystem(m_LuaPackagePaths)); FsmSystem = SystemManager.RegisterSystem(new FsmSystem()); TimerSystem = SystemManager.RegisterSystem(new TimerSystem()); if (!string.IsNullOrEmpty(m_EventKeyTypeName)) { Type eventSystemType = typeof(EventSystem <>); Type eventKeyType = Type.GetType(m_EventKeyTypeName); eventSystemType = eventSystemType.MakeGenericType(eventKeyType); ISystem eventSystem = (ISystem)Activator.CreateInstance(eventSystemType); EventSystem = SystemManager.RegisterSystem(eventSystem); } if (!string.IsNullOrEmpty(m_UICreaterTypeName)) { Type type = Type.GetType(m_UICreaterTypeName); IUICreater creater = (IUICreater)Activator.CreateInstance(type); UISystem = SystemManager.RegisterSystem(new UISystem(creater, m_UIRoot)); if (m_UIDefaultGroups != null) { for (int i = 0; i < m_UIDefaultGroups.Length; ++i) { UISystem.AddGroup(m_UIDefaultGroups[i].Name, m_UIDefaultGroups[i].Depth); } } } if (m_DownloaderComponent != null) { DownloadSystem = SystemManager.RegisterSystem(new DownloadSystem(m_DownloaderComponent)); DownloadSystem.DownloadTimeout = m_DownloadTimeout; } NetworkSystem = SystemManager.RegisterSystem(new NetworkSystem()); HttpSystem = SystemManager.RegisterSystem(new HttpSystem(m_WebRequesterComponent)); if (!string.IsNullOrEmpty(m_DataTableParserTypeName)) { Type parserType = Type.GetType(m_DataTableParserTypeName); IDataTableParser parser = (IDataTableParser)Activator.CreateInstance(parserType); DataTableSystem = SystemManager.RegisterSystem(new DataTableSystem(parser)); } if (!string.IsNullOrEmpty(m_SettingHandlerTypeName)) { Type handlerType = Type.GetType(m_SettingHandlerTypeName); ISettingHandler handler = (ISettingHandler)Activator.CreateInstance(handlerType); SettingSystem = SystemManager.RegisterSystem(new SettingSystem(handler)); } if (!string.IsNullOrEmpty(m_LocalizationParserTypeName)) { Type parserType = Type.GetType(m_LocalizationParserTypeName); ILocalizationParser parser = (ILocalizationParser)Activator.CreateInstance(parserType); LocalizationSystem = SystemManager.RegisterSystem(new LocalizationSystem(parser)); LocalizationSystem.Language = m_LocalizationLanguage; } if (m_EnabledProcedureTypeNames != null && m_EnabledProcedureTypeNames.Length > 0 && !string.IsNullOrEmpty(m_StartProcedureTypeName)) { IProcedure[] procedures = new IProcedure[m_EnabledProcedureTypeNames.Length]; for (int i = 0; i < m_EnabledProcedureTypeNames.Length; ++i) { IProcedure procedure = null; Type type = Type.GetType(m_EnabledProcedureTypeNames[i]); if (type == null) { procedure = new LuaProcedure(m_EnabledProcedureTypeNames[i]); } else { procedure = (IProcedure)Activator.CreateInstance(type); } procedures[i] = procedure; } ProcedureSystem = SystemManager.RegisterSystem(new ProcedureSystem(procedures)); ProcedureSystem.Start(m_StartProcedureTypeName); } if (m_DebugFormTypeNames != null && m_DebugFormTypeNames.Length > 0) { DebugSystem = SystemManager.RegisterSystem(new DebugSystem()); for (int i = 0; i < m_DebugFormTypeNames.Length; ++i) { if (string.IsNullOrEmpty(m_DebugFormTypeNames[i])) { throw new ArgumentNullException("invalid debug form"); } Type debugFormType = Type.GetType(m_DebugFormTypeNames[i]); IDebugForm debugForm = (IDebugForm)Activator.CreateInstance(debugFormType); DebugSystem.RegisterDebugForm(debugForm); } } if (!string.IsNullOrEmpty(m_AudioCreaterTypeName)) { Type createrType = Type.GetType(m_AudioCreaterTypeName); ISounderCreater creater = (ISounderCreater)Activator.CreateInstance(createrType); AudioSystem = SystemManager.RegisterSystem(new AudioSystem(creater)); AudioSystem.MaxSameAudioCount = m_MaxSameAudioCount; AudioSystem.SounderRoot = m_SounderRoot; } EntitySystem = SystemManager.RegisterSystem(new EntitySystem()); if (!string.IsNullOrEmpty(m_SceneLoaderTypeName)) { Type loaderType = Type.GetType(m_SceneLoaderTypeName); ISceneLoader loader = (ISceneLoader)Activator.CreateInstance(loaderType); SceneSystem = SystemManager.RegisterSystem(new SceneSystem(loader)); } }
public FsmGetDonwloadList(ProcedureSystem system) : base((int)EPatchStates.GetDonwloadList) { _system = system; }
public FsmRequestGameVersion(ProcedureSystem system) : base((int)EPatchStates.RequestGameVersion) { _system = system; }