static void StartPublish(string name)
        {
            //if we had an old publish, kill it.
            if (curPublish != null)
            {
                curPublish.Stop();
                curPublish.Dispose();
            }

            try
            {
                curPublish = Publish.Load(name, pubRoot);
            }
            catch (Exception ex)
            {
                comm.SendMessage <StartStopPublishMessageReply>(new StartStopPublishMessageReply(WatchdogComm.GetMachineName(), name, false, "Exception Loading Publish" + ex.Message));
                return;
            }
            PublishRunStatus status = new PublishRunStatus("Unknown Publish Error", false);

            try
            {
                status = curPublish.Start(pubRoot);
            }
            catch (Exception ex)
            {
                Trace.WriteLine("Exception Starting! " + ex.Message);
                comm.SendMessage <StartStopPublishMessageReply>(new StartStopPublishMessageReply(WatchdogComm.GetMachineName(), name, false, "Exception Loading Publish" + ex.Message));
                return;
            }
            Trace.WriteLine("Pub Status: " + status.text);
            curPublish.WatchdogReset += new EventHandler(curPublish_WatchdogReset);
            comm.SendMessage <StartStopPublishMessageReply>(new StartStopPublishMessageReply(WatchdogComm.GetMachineName(), curPublish.name, status.ok, status.text));
        }
 static Publish AutodetectActivePublish()
 {
     try
     {
         foreach (string s in Publish.GetAllPublishNames(pubRoot))
         {
             Publish p = Publish.Load(s, pubRoot);
             if (p.IsCommandRunning())
             {
                 return(p);
             }
         }
     }
     catch
     { }
     return(null);
 }
        public static void MainLoop()
        {
            comm.GotStartPublishMessage      += new EventHandler <WatchdogMessageEventArgs <StartPublishMessage> >(comm_GotStartPublishMessage);
            comm.GotStopPublishMessage       += new EventHandler <WatchdogMessageEventArgs <StopPublishMessage> >(comm_GotStopPublishMessage);
            comm.GotWatchdogTerminateMessage += new EventHandler <WatchdogMessageEventArgs <WatchdogTerminateMessage> >(comm_GotWatchdogTerminateMessage);
            comm.GotCommandMessage           += new EventHandler <WatchdogMessageEventArgs <CommandMessage> >(comm_GotCommandMessage);

            Thread t = new Thread(new ThreadStart(StatusThread));

            t.Name = "Watchdog Status Thread";
            t.Start();
            Publish autoP = AutodetectActivePublish();

            if (autoP != null)
            {
                StartPublish(autoP.name);
            }
#if !SERVICE
            while (running)
            {
                string s = Console.ReadLine();
                if (s == null)
                {
                    continue;
                }
                if (s.StartsWith("load") && s.Split(" ".ToCharArray(), StringSplitOptions.None).Length > 1)                 //load a publish
                {
                    Trace.WriteLine("Loading " + s.Substring(s.IndexOf(" ") + 1));
                    curPublish = Publish.Load(s.Substring(s.IndexOf(" ") + 1), pubRoot);
                }
                if (s.StartsWith("show all"))
                {
                    foreach (string p in Publish.GetAllPublishNames(pubRoot))
                    {
                        Trace.WriteLine(p);
                    }
                }
                if (s.StartsWith("curpub"))
                {
                    if (curPublish == null)
                    {
                        Trace.WriteLine("No Publish Loaded.");
                    }
                    else
                    {
                        curPublish.PrintDebug();
                        Trace.WriteLine("Running: " + curPublish.IsCommandRunning());
                    }
                }
                if (s.StartsWith("start"))
                {
                    if (curPublish == null)
                    {
                        Trace.WriteLine("No publish loaded.");
                    }
                    else
                    {
                        curPublish.Start(pubRoot);
                    }
                }

                if (s.StartsWith("wdon"))
                {
                    if (curPublish == null)
                    {
                        Trace.WriteLine("No publish loaded.");
                    }
                    else
                    {
                        Trace.WriteLine("Enabling Watchdog...");
                        curPublish.watchdogAutoRestart = true;
                    }
                }

                if (s.StartsWith("wdoff"))
                {
                    if (curPublish == null)
                    {
                        Trace.WriteLine("No publish loaded.");
                    }
                    else
                    {
                        Trace.WriteLine("Disabling Watchdog...");
                        curPublish.watchdogAutoRestart = false;
                    }
                }
                if (s.StartsWith("list"))
                {
                    Process[]      parr             = Process.GetProcesses();
                    List <Process> runningProcesses = new List <Process>(parr);
                    foreach (Process filename in runningProcesses)
                    {
                        Trace.WriteLine(filename.ProcessName);
                    }
                }
            }
            t.Abort();
            traceText.Flush();
#endif
        }