Ejemplo n.º 1
0
        public static bool ClearAllUpdateFiles(string localUpdatePath, UpdaterHandler handler = null)
        {
            //if (Directory.Exists(KEnv.PatchResourcesDirPath))
            //            {
            // 可以断定是重新安装了客户端,删掉patch_resources
            //                var waitDelete = true;
            //                string deleteDirError = null;
            //                ThreadPool.QueueUserWorkItem((_) =>
            //                {
            try
            {
                if (Directory.Exists(localUpdatePath))
                {
                    Directory.Delete(localUpdatePath, true);
                }

                if (ClearAllUpdateFilesHook != null)
                {
                    ClearAllUpdateFilesHook();
                }
            }
            catch (Exception e)
            {
                OnError(handler, e.Message);
                return(false);
            }
            //                    finally
            //                    {
            //                        waitDelete = false;
            //                    }
            //                });
            //                while (waitDelete)
            //                    yield return null;
            //                if (!string.IsNullOrEmpty(deleteDirError))
            //                {
            //                    KLog.Err(deleteDirError);
            //                }
            // 清理过后,进行刷新热更新脚本列表
            //                Reload();
            //            }
            return(true);
        }
Ejemplo n.º 2
0
        /// <summary>
        ///     Error handler
        /// </summary>
        /// <param name="message"></param>
        protected static void OnError(UpdaterHandler handler, string message, params object[] args)
        {
            if (handler != null)
            {
                handler.AppendLog(message, args);
            }

            var errMsg = string.Format(message, args);

            if (handler != null)
            {
                handler.Error      = new UpdaterException(errMsg);
                handler.IsFinished = true;
            }

            if (CustomOnError != null)
            {
                CustomOnError(errMsg);
            }
            //            else
            //                throw new UpdaterException(errMsg);
        }
        protected internal override UpdaterHandler OnTransition(UpdaterHandler[] all, UpdaterHandler next)
        {
            if (LocalVersion == RemoteVersion)
            {
                return(null); // over, no next any more
            }
            if (LocalVersion > RemoteVersion)
            {
                AppendLog("Local version greater than remote version! clear local all!");

                // clear all, re update all
                UpdaterVerifyFileHandler.ClearAllUpdateFiles(_localUpdaterPath, this);
                // IMPOSSIBLE! local version cannot greater than Remote version! this must be a revert operation
                LocalVersion = 0;
            }

            if (RemoteVersion == 0) // no update! over now!
            {
                return(null);
            }

            AppendLog("Local version {0}, Remote Version {1}, do update!", LocalVersion, RemoteVersion);
            // default, next go
            return(next);
        }
Ejemplo n.º 4
0
 /// <summary>
 ///     Decide transition to which next handler
 /// </summary>
 /// <param name="all"></param>
 /// <param name="next"></param>
 /// <returns></returns>
 protected internal virtual UpdaterHandler OnTransition(UpdaterHandler[] all, UpdaterHandler next)
 {
     return(next);
 }
Ejemplo n.º 5
0
        /// <summary>
        ///     Thread function
        /// </summary>
        /// <param name="state"></param>
        private void _StartThread(object state)
        {
            for (var i = 0; i < _handlers.Length; i++)
            {
                var handler = _handlers[i];
                CurrentHandler = handler;
                handler.Start();

                var      currentHandlerStartTime = DateTime.Now;
                DateTime?fullProgressStarTime    = null;

                var otherError = false;
                while (!handler.IsFinished)
                {
                    if ((DateTime.Now - currentHandlerStartTime).TotalSeconds > UpdaterHandlerTimeout)
                    {
                        Error =
                            new TimeoutException(string.Format("UpdaterHandler {0} Timeout over {1}s", handler,
                                                               UpdaterHandlerTimeout));
                        otherError = true;
                        break;
                    }

                    if (handler.Progress >= 1)
                    {
                        if (fullProgressStarTime == null)
                        {
                            fullProgressStarTime = DateTime.Now;
                        }

                        if ((DateTime.Now - fullProgressStarTime.Value).TotalSeconds > UpdaterHandlerFullProgressTimeout)
                        {
                            Error =
                                new TimeoutException(
                                    string.Format("UpdaterHandler {0} Progress 100% but timeout over {1}s", handler,
                                                  UpdaterHandlerFullProgressTimeout));
                            otherError = true;
                            break;
                        }
                    }

                    Thread.Sleep(1);
                }

                if (otherError)
                {
                    ErrorHandler = handler;
                    break;
                }

                if (handler.IsError)
                {
                    Error        = handler.Error;
                    ErrorHandler = handler;
                    break;
                }

                // next transition
                if ((i + 1) < _handlers.Length)
                {
                    var next = _handlers[i + 1];

                    if (OnTransitionEvent != null)
                    {
                        OnTransitionEvent(CurrentHandler, next);
                    }

                    if (handler.OnTransition(_handlers, next) == null)
                    {
                        break; // if null, break next
                    }
                }
            }
            CurrentHandler = null;

            IsDone = true;
            if (FinishCallback != null)
            {
                FinishCallback(this);
            }
        }