コード例 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="args"></param>
        /// <returns>True if DS should exit</returns>
        public static bool ProcessArgs(string[] args)
        {
            if (args.Contains("-report"))
            {
                if (args.Count() > 1)
                {
                    MyErrorReporter.ReportNotInteractive(args[1], "SEDS");
                }
                return(true);
            }

            MySandboxGame.IsDedicated = true;

            string customPath = null;

            if (args.Contains("-ignorelastsession"))
            {
                MySandboxGame.IgnoreLastSession = true;
            }

            Environment.SetEnvironmentVariable("SteamAppId", MyPerServerSettings.AppId.ToString());

            if (args.Contains("-maxPlayers"))
            {
                int index = args.ToList().IndexOf("-maxPlayers");
                if (index + 1 < args.Length)
                {
                    string maxPlayersString = args[index + 1];
                    int    maxPlayers       = 0;
                    if (int.TryParse(maxPlayersString, out maxPlayers))
                    {
                        MyDedicatedServerOverrides.MaxPlayers = maxPlayers;
                    }
                }
            }

            if (args.Contains("-ip"))
            {
                int index = args.ToList().IndexOf("-ip");
                if (index + 1 < args.Length)
                {
                    IPAddress.TryParse(args[index + 1], out MyDedicatedServerOverrides.IpAddress);
                }
            }

            if (args.Contains("-port"))
            {
                int index = args.ToList().IndexOf("-port");
                if (index + 1 < args.Length)
                {
                    string portString = args[index + 1];
                    int    port;
                    if (int.TryParse(portString, out port))
                    {
                        MyDedicatedServerOverrides.Port = port;
                    }
                }
            }

            if (args.Contains("-path"))
            {
                int index = args.ToList().IndexOf("-path");
                if (index + 1 < args.Length)
                {
                    string path = args[index + 1];
                    path = path.Trim('"');

                    bool isAbsolutePath = false;
                    if (path.Length > 1 && path[1] == ':')
                    {
                        isAbsolutePath = true;
                    }

                    if (isAbsolutePath)
                    {
                        if (!System.IO.Directory.Exists(path))
                        {
                            return(true);
                        }
                    }
                    else
                    {
                        string dirname = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
                        path = Path.Combine(dirname, path);
                        if (!System.IO.Directory.Exists(path))
                        {
                            return(true);
                        }
                    }

                    customPath = path;
                }
                else
                {
                    return(true);
                }
            }


            if (args.Contains("-console"))
            {
                RunMain("Default", customPath, false);
                return(true);
            }

            if (args.Contains("-noconsole"))
            {
                RunMain("Default", customPath, false, false);
                return(true);
            }

            return(false);
        }
コード例 #2
0
        //  Main method
        static void Main(string[] args)
        {
            if (args.Contains("-report"))
            {
                MyErrorReporter.Report(args[1], args[2], "SE", MyErrorReporter.APP_ERROR_MESSAGE);
                return;
            }

            if (MyFakes.ENABLE_CONNECT_COMMAND_LINE && args.Contains("+connect"))
            {
                int index = args.ToList().IndexOf("+connect");
                if ((index + 1) < args.Length)
                {
                    if (IPAddressExtensions.TryParseEndpoint(args[index + 1], out MySandboxGame.ConnectToServer))
                    {
                        Console.WriteLine("Space engineers " + MyFinalBuildConstants.APP_VERSION_STRING);
                        Console.WriteLine("Obfuscated: " + MyObfuscation.Enabled + ", Platform: " + (Environment.Is64BitProcess ? " 64-bit" : " 32-bit"));
                        Console.WriteLine("Connecting to: " + args[index + 1]);
                    }
                }
            }

            MySingleProgramInstance spi = new MySingleProgramInstance(MyFileSystem.MainAssemblyName);

            if (spi.IsSingleInstance == false)
            {
                MyErrorReporter.ReportAppAlreadyRunning("Space Engineers");
                return;
            }

            MyInitializer.InvokeBeforeRun(
                AppId,
                "SpaceEngineers",
                Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "SpaceEngineers"));

            MyInitializer.InitCheckSum();

            if (!args.Contains("-nosplash"))
            {
                InitSplashScreen();
            }

            // This won't crash with BadFormatExpection when 64-bit game started as 32-bit process, it will show message
            // Will uncomment when it's possible to test it
            if (!Environment.Is64BitProcess && AssemblyExtensions.TryGetArchitecture("SteamSDK.dll") == ProcessorArchitecture.Amd64)
            {
                string text = "Space Engineers cannot be started in 64-bit mode, ";
                text += "because 64-bit version of .NET framework is not available or is broken." + Environment.NewLine + Environment.NewLine;
                text += "Do you want to open website with more information about this particular issue?" + Environment.NewLine + Environment.NewLine;
                text += "Press Yes to open website with info" + Environment.NewLine;
                text += "Press No to run in 32-bit mode (smaller potential of Space Engineers!)" + Environment.NewLine;
                text += "Press Cancel to close this dialog";

                var result = Sandbox.MyMessageBox.Show(IntPtr.Zero, text, ".NET Framework 64-bit error", Sandbox.MessageBoxOptions.YesNoCancel);
                if (result == MessageBoxResult.Yes)
                {
                    MyBrowserHelper.OpenInternetBrowser("http://www.spaceengineersgame.com/64-bit-start-up-issue.html");
                }
                else if (result == MessageBoxResult.No)
                {
                    var    entry  = Assembly.GetEntryAssembly().Location;
                    string x86Exe = Path.Combine(new FileInfo(entry).Directory.Parent.FullName, "Bin", Path.GetFileName(entry));

                    ProcessStartInfo pi = new ProcessStartInfo();
                    pi.FileName         = x86Exe;
                    pi.WorkingDirectory = Path.GetDirectoryName(x86Exe);
                    pi.Arguments        = "-fallback";
                    pi.UseShellExecute  = false;
                    pi.WindowStyle      = ProcessWindowStyle.Normal;
                    var p = Process.Start(pi);
                }
                return;
            }


            if (MyFakes.DETECT_LEAKS)
            {
                //Slow down
                SharpDX.Configuration.EnableObjectTracking = true;
                //SharpDX.Diagnostics.ObjectTracker.OnObjectCreated += new SharpDX.Diagnostics.ObjectTracker.ComObjectDelegate(OnResourceCreated);
                //SharpDX.Diagnostics.ObjectTracker.OnObjectReleased += new SharpDX.Diagnostics.ObjectTracker.ComObjectDelegate(OnResourceDestroyed);
                //SharpDX.Diagnostics.ObjectTracker.OnObjectTrack += new SharpDX.Diagnostics.ObjectTracker.ComObjectDelegate(OnObjectTrack);
                //SharpDX.Diagnostics.ObjectTracker.OnObjectUnTrack += new SharpDX.Diagnostics.ObjectTracker.ComObjectDelegate(OnObjectUnTrack);
            }

            RunInternal(args);

            if (MyFakes.DETECT_LEAKS)
            {
                var o = SharpDX.Diagnostics.ObjectTracker.FindActiveObjects();
                System.Diagnostics.Debug.Assert(o.Count == 0, "Unreleased DX objects!");
                Console.WriteLine(SharpDX.Diagnostics.ObjectTracker.ReportActiveObjects());
            }

#if PROFILING
            MyPerformanceTimer.WriteToLog();
#endif
            MyInitializer.InvokeAfterRun();
        }