示例#1
0
        internal bool Run(string magicCookie)
        {
            if (string.IsNullOrEmpty(magicCookie))
            {
                Log("ipc not available");// EventLogEntryType.Error, 1000);
                return(false);
            }

            if (_component != null)
            {
                Log("worker already initialized");//, EventLogEntryType.Error, 1000);
                return(false);
            }

            //object obj = null;
            //try
            //{
            //    obj = Activator.CreateInstance(Type.GetType(Configuration.Component, true));

            //}
            //catch (Exception ex)
            //{
            //    Log("failed to create " + Configuration.Component + ":\r\n" + ex, EventLogEntryType.Error, 1000);
            //    return false;
            //}

            //if (obj == null)
            //{
            //    Log("failed to create " + Configuration.Component, EventLogEntryType.Error, 1000);
            //    return false;
            //}

            _component = new EggComponent();  //obj as IHAComponent;

            _waitForExit = new ManualResetEvent(false);

            if (_runAsConsole)
            {
                MasterConsole master = new MasterConsole(magicCookie);
                master.Worker = System.Diagnostics.Process.GetCurrentProcess();

                Thread t = new Thread(RunAsConsoleApp);
                t.IsBackground = true;
                t.Name         = "HA_Worker_Runas_Console_App";
                t.Start(master);
            }

            _console = new WorkerConsole(magicCookie);
            _console.PingCommandReceived   += OnPingCommandReceived;
            _console.StartCommandReceived  += OnStartCommandReceived;
            _console.PauseCommandReceived  += OnPauseCommandReceived;
            _console.ResumeCommandReceived += OnResumeCommandReceived;
            _console.StopCommandReceived   += OnStopCommandReceived;

            _status = WorkerStatus.Ready;
            _console.Initialized();

            _waitForExit.WaitOne();
            return(true);
        }
示例#2
0
 public MasterController(bool runAsConsole)
 {
     _runAsConsole = runAsConsole;
     _console      = new MasterConsole(Guid.NewGuid().ToString("n"));
 }
示例#3
0
        private void RunAsConsoleApp(object state)
        {
            MasterConsole master = state as MasterConsole;

            if (master == null)
            {
                Console.Error.WriteLine("failed to start worker as console app");
                _waitForExit.Set();
                return;
            }

            Console.SetOut(new ConsoleWriter(Console.Out));

            Console.Error.WriteLine("running worker as console app, available commands:\r\n  start,stop,pause,resume");
            try
            {
                while (true)
                {
                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.Error.Write("> ");
                    Console.ResetColor();
                    string cmd = Console.ReadLine();
                    if (cmd == null)
                    {
                        break;
                    }

                    switch (cmd)
                    {
                    case "start":
                        if (_status != WorkerStatus.Ready)
                        {
                            Console.Error.WriteLine("worker not ready yet");
                        }
                        else if (!master.Start(Timeout.Infinite))
                        {
                            goto quit;
                        }
                        break;

                    case "stop":
                        if (_status != WorkerStatus.Running && _status != WorkerStatus.Paused)
                        {
                            Console.Error.WriteLine("worker not started yet");
                            break;
                        }
                        master.Stop(Timeout.Infinite);
                        goto quit;

                    case "pause":
                        if (_status != WorkerStatus.Running)
                        {
                            Console.Error.WriteLine("worker not running");
                        }
                        else
                        {
                            master.Pause();
                        }
                        break;

                    case "resume":
                        if (_status != WorkerStatus.Paused)
                        {
                            Console.Error.WriteLine("worker not paused");
                        }
                        else
                        {
                            master.Resume();
                        }
                        break;

                    default:
                        Console.Error.WriteLine("unkown command");
                        break;
                    }
                }
            }
            catch (Exception ex)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.Error.WriteLine(ex);
                Console.ResetColor();
            }

quit:
            if (_status == WorkerStatus.Running || _status == WorkerStatus.Paused)
            {
                master.Stop(Timeout.Infinite);
            }
            _waitForExit.Set();
        }