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();
            }
        }
Esempio n. 2
0
        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}");
            }
        }
Esempio n. 3
0
        /// <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();
        }
Esempio n. 4
0
        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();
            }
        }
Esempio n. 5
0
 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;
 }
Esempio n. 8
0
 public FsmPatchOver(ProcedureSystem system) : base((int)EPatchStates.PatchOver)
 {
     _system = system;
 }
Esempio n. 9
0
 public FsmPatchPrepare(ProcedureSystem system) : base((int)EPatchStates.PatchPrepare)
 {
     _system = system;
 }
Esempio n. 10
0
 public FsmCheckSandboxDirty(ProcedureSystem system) : base((int)EPatchStates.CheckSandboxDirty)
 {
     _system = system;
 }
Esempio n. 11
0
        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));
            }
        }
Esempio n. 12
0
 public FsmGetDonwloadList(ProcedureSystem system) : base((int)EPatchStates.GetDonwloadList)
 {
     _system = system;
 }
 public FsmRequestGameVersion(ProcedureSystem system) : base((int)EPatchStates.RequestGameVersion)
 {
     _system = system;
 }