Ejemplo n.º 1
0
 public static void StartEngine(ILazyEngine engine)
 {
     _engine = engine;
     Clear();
     foreach (MainState mainState in _engine.States)
     {
         AddState(mainState);
     }
     lock (States)
     {
         States.Add(new StateIdle());
         LastState = States[States.Count() - 1]; //Set the last state to StateIdle
     }
     States.Sort();
     Logging.Write("[Engine]Initializing");
     Paused  = false;
     Running = true;
     // Leave it as a background thread.
     _workerThread = new Thread(Run)
     {
         IsBackground = true
     };
     _workerThread.Name = "Engine";
     _workerThread.SetApartmentState(ApartmentState.STA);
     _workerThread.Start();
     Logging.Write("[Engine]Started bot thread");
 }
Ejemplo n.º 2
0
 public static void AddState(MainState state)
 {
     if (States == null)
     {
         States = new List <MainState>();
     }
     if (!States.Contains(state))
     {
         States.Add(state);
     }
 }
Ejemplo n.º 3
0
 public static void StopEngine()
 {
     if (!Running)
     {
         return;
     }
     Running = false;
     if (_workerThread.IsAlive)
     {
         _workerThread.Abort();
     }
     // Clear out the thread object and let the garbage collector get it
     _workerThread = null;
     States        = null;
     LastState     = null;
     _engine       = null;
     GC.Collect();
 }
Ejemplo n.º 4
0
 private static void Run()
 {
     try
     {
         while (Running)
         {
             try
             {
                 if (Paused)
                 {
                     _engine.Pause();
                     while (Paused)
                     {
                         Thread.Sleep(100);
                     }
                     _engine.Resume();
                 }
                 while (ChatQueu.QueueCount != 0)
                 {
                     _engine.Pause();
                     KeyHelper.ChatboxSendText(ChatQueu.GetItem);
                     Thread.Sleep(100);
                     _engine.Resume();
                 }
                 foreach (MainState state in States.Where(state => state.NeedToRun))
                 {
                     if (LastState != state)
                     {
                         if (StateChange != null)
                         {
                             StateChange(new object(), new NotifyStateChanged(state.Name()));
                             Logging.Debug("State changed: " + state.Name());
                         }
                     }
                     state.DoWork();
                     LastState = state;
                     break;
                 }
             }
             catch (ThreadAbortException)
             {
             }
             catch (ThreadStateException h)
             {
                 Logging.Write("Thread in odd state, restarting: " + h);
             }
             catch (Exception e)
             {
                 if (ObjectManager.InGame)
                 {
                     Logging.Write("[Engine] Exception " + e);
                 }
                 Thread.Sleep(4000);
             }
             Thread.Sleep(1);
             Application.DoEvents();
         }
     }
     catch (ThreadAbortException)
     {
     }
     catch (Exception e)
     {
         Logging.Write("[Engine]Botting error: " + e);
     }
     finally
     {
         Running = false;
     }
 }