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); }
public MasterController(bool runAsConsole) { _runAsConsole = runAsConsole; _console = new MasterConsole(Guid.NewGuid().ToString("n")); }
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(); }