protected override void OnStart(string[] args)
        {
            Log.Debug("Start service called");
            Log.Debug(string.Concat("Args: ", string.Join(",", args)));

            if (args != null && args.Length > 0)
            {
                var argList = args.ToList();
                int pIndex = argList.IndexOf("-p");
                if (pIndex < 0)
                {
                    pIndex = argList.IndexOf("--params");
                }

                if (pIndex >= 0)
                {
                    args[pIndex + 1] = args[pIndex + 1].Replace('-', '}');
                }
                Options = new SrcdsOptions();
                if (!Parser.Default.ParseArguments(args, Options))
                {
                    Options = null;
                }
            }

            if (Options == null)
            {
                Log.Debug("No args passed, attempting to load setup.json file.");

                if (File.Exists("setup.json"))
                {
                    try
                    {
                        using (FileStream fs = new FileStream("setup.json", FileMode.Open))
                        using (StreamReader sr = new StreamReader(fs))
                        {
                            Options = JsonConvert.DeserializeObject<SrcdsOptions>(sr.ReadToEnd());
                        }
                    }
                    catch (Exception ex)
                    {
                        Log.Error("Could not parse setup.json", ex);
                    }
                }
                else
                {
                    Log.Debug("setup.json could not be found.");
                }
            }

            if (Options != null)
            {
                Options.SrcdsParameters = Options.SrcdsParameters.Replace('}', '-');
                if (!File.Exists(Options.SrcdsPath))
                {
                    Log.Debug("Srcds path was not found");
                    Log.Debug(Options.GetUsage());
                    Environment.Exit(1);
                }

                if (Options.CheckForUpdates && ((string.IsNullOrEmpty(Options.SteamCmdPath) && File.Exists(Options.SteamCmdPath)) || string.IsNullOrEmpty(Options.UpdateScriptPath)))
                {
                    Log.Debug("Invalid update settings");
                    Log.Debug(Options.GetUsage());
                    Environment.Exit(1);
                }
                CancellationSource = new CancellationTokenSource();

                Task.Run(() =>
                {
                    Handler = new SrcdsHandler(Options);
                    Handler.StartSrcds(CancellationSource.Token);
                }, CancellationSource.Token);
            }
            else
            {
                Log.Debug("Invalid command line args");
                Log.Debug(Options.GetUsage());
            }
        }
        protected override void OnStart(string[] args)
        {
            Log.Debug("Start service called");
            Log.Debug(string.Concat("Args: ", string.Join(",", args)));

            if (args != null && args.Length > 0)
            {
                var argList = args.ToList();
                int pIndex  = argList.IndexOf("-p");
                if (pIndex < 0)
                {
                    pIndex = argList.IndexOf("--params");
                }

                if (pIndex >= 0)
                {
                    args[pIndex + 1] = args[pIndex + 1].Replace('-', '}');
                }
                Options = new SrcdsOptions();
                if (!Parser.Default.ParseArguments(args, Options))
                {
                    Options = null;
                }
            }

            if (Options == null)
            {
                Log.Debug("No args passed, attempting to load setup.json file.");

                if (File.Exists("setup.json"))
                {
                    try
                    {
                        using (FileStream fs = new FileStream("setup.json", FileMode.Open))
                            using (StreamReader sr = new StreamReader(fs))
                            {
                                Options = JsonConvert.DeserializeObject <SrcdsOptions>(sr.ReadToEnd());
                            }
                    }
                    catch (Exception ex)
                    {
                        Log.Error("Could not parse setup.json", ex);
                    }
                }
                else
                {
                    Log.Debug("setup.json could not be found.");
                }
            }

            if (Options != null)
            {
                Options.SrcdsParameters = Options.SrcdsParameters.Replace('}', '-');
                if (!File.Exists(Options.SrcdsPath))
                {
                    Log.Debug("Srcds path was not found");
                    Log.Debug(Options.GetUsage());
                    Environment.Exit(1);
                }

                if (Options.CheckForUpdates && ((string.IsNullOrEmpty(Options.SteamCmdPath) && File.Exists(Options.SteamCmdPath)) || string.IsNullOrEmpty(Options.UpdateScriptPath)))
                {
                    Log.Debug("Invalid update settings");
                    Log.Debug(Options.GetUsage());
                    Environment.Exit(1);
                }
                CancellationSource = new CancellationTokenSource();

                Task.Run(() =>
                {
                    Handler = new SrcdsHandler(Options);
                    Handler.StartSrcds(CancellationSource.Token);
                }, CancellationSource.Token);
            }
            else
            {
                Log.Debug("Invalid command line args");
                Log.Debug(Options.GetUsage());
            }
        }