コード例 #1
0
        public string Reply()
        {
            switch (State)
            {
            case IdleState.Initialize:
                break;

            case IdleState.StartDelay:
                if (Stats.IsInGame || Stats.IsLoadingWorld)
                {
                    State = IdleState.CheckIdle;
                }
                else if (General.DateSubtract(StartDelay) > 0)
                {
                    if (FailedStartDelay > 5 || (FailedStartDelay > 3 && General.DateSubtract(TimeFailedStartDelay) > 600))
                    {
                        State = IdleState.Terminate;
                        break;
                    }
                    Logger.Instance.Write(Parent, "Demonbuddy:{0}: Delayed start failed! ({1} seconds overtime)", Parent.Demonbuddy.Proc.Id, General.DateSubtract(StartDelay));
                    TimeFailedStartDelay = DateTime.Now;
                    FailedStartDelay++;
                    return("Restart");
                }
                break;

            case IdleState.CheckIdle:
                _lastIdleAction = DateTime.Now;     // Update Last Idle action time
                return(IdleAction);

            case IdleState.Busy:
                if (Stats.IsRunning && !Stats.IsPaused && Stats.IsInGame)
                {
                    Reset();
                }
                else if (General.DateSubtract(_lastIdleAction) > 10)
                {
                    if (Failed >= 3)
                    {
                        State = IdleState.Terminate;
                    }

                    Failed++;
                    Reset();
                }
                break;

            case IdleState.UserStop:
                if (Stats.IsRunning)
                {
                    State = IdleState.CheckIdle;
                }
                ResetCoinage();
                break;

            case IdleState.UserPause:
                if (!Stats.IsPaused)
                {
                    State = IdleState.CheckIdle;
                }
                break;

            case IdleState.NewProfile:
                State = IdleState.CheckIdle;
                return("LoadProfile " + Parent.ProfileSchedule.GetProfile);

            case IdleState.Terminate:
                Parent.Restart();
                break;
            }
            return("Roger!");
        }