public static void EnterToExit(int exitCode, SteamworksArgs sa)
 {
     EnsureLog();
     EnsureConsole(sa);
     Console.Write("Press enter to exit...");
     Console.ReadLine();
     ExitAndDispose(exitCode);
 }
 public static void EnsureConsole(SteamworksArgs sa)
 {
     if (sa.IsSilent() || consoleOpened)
     {
         return;
     }
     WinConsole.Initialize();
     Console.Title = Title;
     consoleOpened = true;
 }
 public static void WriteLine(string line, SteamworksArgs sa)
 {
     LogLineHeader(line);
     try {
         EnsureConsole(sa);
         Console.WriteLine(line);
     } catch (Exception conEx) {
         LogLine("Error displaying console!");
         LogLine($"{conEx}");
     }
 }
        static void LaunchProc(SteamworksArgs sa)
        {
            string procExe = SteamworksConfig.CheckProcExecutableSafe();

            try {
                ProcessStartInfo startInfo = new ProcessStartInfo {
                    FileName         = GetLocal(procExe),
                    WorkingDirectory = WorkingDir,
                    WindowStyle      = ProcessWindowStyle.Normal,
                    UseShellExecute  = true,
                    CreateNoWindow   = true,
                };
                Process.Start(startInfo).Dispose();
            } catch (Exception ex) {
                ExitWithException($"Failed to start {procExe}!", ex, sa);
            }
        }
 public static void ExitWithError(string line, SteamworksArgs sa)
 {
     EnsureLog();
     LogLineHeader(line);
     try {
         EnsureConsole(sa);
         //Console.WriteLine(Title);
         Console.ForegroundColor = ConsoleColor.Red;
         Console.WriteLine(line);
         Console.ResetColor();
         Console.WriteLine();
         EnterToExit(1, sa);
     } catch (Exception conEx) {
         LogLine("Error displaying console!");
         LogLine($"{conEx}");
     }
     ExitAndDispose(1);
 }
 public static bool IsSilent(this SteamworksArgs sa)
 {
     return(sa?.Config?.Silent ?? SteamworksConfig.CheckSilentSafe());
 }
        static void Main(string[] args)
        {
            Title = "Unlimited Steamworks";

            SteamworksArgs wsa = null;
            SteamworksArgs sa  = null;

            if (args.Length == 1 && (args[0] == "-h" || args[0] == "--help"))
            {
                EnsureConsole(SteamworksArgs.NotSilent);
                sa.PrintUsage();
                EnterToExit(0, SteamworksArgs.NotSilent);
            }

            if (args.Length == 0 && !IsWorkingDirLocal)
            {
                try {
                    wsa = SteamworksArgs.LoadWorking();
                } catch (Exception ex) {
                    ExitWithException($"Error loading working directory {SteamworksArgsFile}!", ex, sa);
                }
            }

            if (wsa != null && args.Length == 0)
            {
                sa = wsa;
            }
            else
            {
                sa = new SteamworksArgs();
                try {
                    if (sa.Config == null)
                    {
                        sa.Config = SteamworksConfig.Load();
                    }
                } catch (Exception ex) {
                    ExitWithException($"Error loading {SteamworksConfigFile}!", ex, sa);
                }

                if (args.Length == 0)
                {
                    EnsureConsole(SteamworksArgs.NotSilent);
                    sa.PrintUsage();
                    EnterToExit(0, SteamworksArgs.NotSilent);
                }
                else
                {
                    try {
                        sa.Parse(args);
                        if (sa.Help)
                        {
                            ExitWithError("Help option cannot be used with any other options!", sa);
                        }

                        // Merge settings

                        /*if (wsa != null) {
                         *      sa.AppId = sa.AppId ?? wsa.AppId;
                         *      sa.Executable = sa.Executable ?? wsa.Executable;
                         *      sa.Elevate = sa.Elevate ?? wsa.Elevate;
                         *      sa.ProcessName = sa.ProcessName ?? wsa.ProcessName;
                         *      sa.WorkingDir = sa.WorkingDir ?? wsa.WorkingDir;
                         *      sa.Delay = sa.Delay ?? wsa.Delay;
                         *      sa.Interval = sa.Interval ?? wsa.Interval;
                         *      if (sa.Arguments?.Any() ?? false)
                         *              sa.Arguments = wsa.Arguments;
                         *      sa.Config = sa.Config ?? wsa.Config;
                         * }*/
                    } catch (Exception ex) {
                        ExitWithException($"Argument error:", ex, wsa?.Config != null ? wsa : sa);
                    }
                }
            }

            if (!sa.DetectSteamAppId())
            {
                ExitWithError($"No valid {SteamAppIdFile} was present and no App ID was specified!", sa);
            }
            if (sa.Executable == null)
            {
                ExitWithError($"No program path specified!", sa);
            }
            sa.Save();

            LaunchProc(sa);

            ExitAndDispose(0);
        }