Esempio n. 1
0
 public virtual void HandleException(Exception ex, string stackTraceFile, string errorMessage)
 {
     ClassMappings.HandleException(ex, stackTraceFile, errorMessage);
 }
Esempio n. 2
0
        public static void Main(string[] args)
        {
            RetCode rc;

            try
            {
                rc = RetCode.Success;

                WorkDir = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);

                PushConstants();

                PushClassMappings();

                ClassMappings.LoadPortabilityClassMappings = LoadPortabilityClassMappings;

                ClassMappings.ResolvePortabilityClassMappings();

                if (args == null || args.Length < 2 || !args[0].Equals("-pfn", StringComparison.OrdinalIgnoreCase))
                {
                    rc = RetCode.InvalidArg;

                    ClassMappings.Error.WriteLine("{0}Usage: dotnet EamonPM.WindowsUnix.dll -pfn PluginFileName [PluginArgs]", Environment.NewLine);

                    goto Cleanup;
                }

                try
                {
                    while (true)
                    {
                        if (args == null || args.Length < 2 || !args[0].Equals("-pfn", StringComparison.OrdinalIgnoreCase))
                        {
                            goto Cleanup;
                        }

                        var systemBinDir = string.Format("{0}System{0}Bin", Path.DirectorySeparatorChar);

                        var currWorkDir = Directory.GetCurrentDirectory();

                        // if current working directory invalid, bail out

                        if (!currWorkDir.EndsWith(systemBinDir) || currWorkDir.Length <= systemBinDir.Length || !Directory.Exists(Constants.AdventuresDir.Replace('\\', Path.DirectorySeparatorChar)))
                        {
                            rc = RetCode.Failure;

                            ClassMappings.Error.WriteLine("{0}Usage: to run Eamon CS change your working directory to System{1}Bin", Environment.NewLine, Path.DirectorySeparatorChar);

                            goto Cleanup;
                        }

                        ExecutePlugin(args);

                        args = NextArgs;

                        NextArgs = null;
                    }
                }
                catch (Exception ex)
                {
                    rc = RetCode.Failure;

                    ClassMappings.HandleException
                    (
                        ex,
                        Constants.StackTraceFile,
                        string.Format("{0}Error: Caught fatal exception; terminating program", Environment.NewLine)
                    );

                    goto Cleanup;
                }

Cleanup:

                if (rc != RetCode.Success)
                {
                    ClassMappings.Error.WriteLine("{0}{1}", Environment.NewLine, new string('-', (int)Constants.RightMargin));

                    ClassMappings.Error.Write("{0}Press any key to continue: ", Environment.NewLine);

                    ClassMappings.In.ReadKey(true);

                    ClassMappings.Error.WriteLine();

                    ClassMappings.Thread.Sleep(150);
                }

                ClassMappings.Out.CursorVisible = true;
            }
            catch (Exception)
            {
                rc = RetCode.Failure;

                // do nothing
            }
            finally
            {
                PopClassMappings();

                PopConstants();
            }

            Environment.Exit(rc == RetCode.Success ? 0 : -1);
        }