Server.Core.CurrentDomain_UnhandledException C# (CSharp) Method

CurrentDomain_UnhandledException() private static method

private static CurrentDomain_UnhandledException ( object sender, UnhandledExceptionEventArgs e ) : void
sender object
e System.UnhandledExceptionEventArgs
return void
        private static void CurrentDomain_UnhandledException( object sender, UnhandledExceptionEventArgs e )
        {
            Console.WriteLine( e.IsTerminating ? "Error:" : "Warning:" );
            Console.WriteLine( e.ExceptionObject );

            if( e.IsTerminating )
            {
                m_Crashed = true;

                bool close = false;

                try
                {
                    CrashedEventArgs args = new CrashedEventArgs( e.ExceptionObject as Exception );

                    EventSink.InvokeCrashed( args );

                    close = args.Close;
                }
                catch
                {
                }

                if( !close && !m_Service )
                {
                    try
                    {
                        for( int i = 0; i < m_MessagePump.Listeners.Length; i++ )
                        {
                            m_MessagePump.Listeners[i].Dispose();
                        }
                    }
                    catch
                    {
                    }

                    if ( m_Service ) {
                        Console.WriteLine( "This exception is fatal." );
                    } else {
                        Console.WriteLine( "This exception is fatal, press return to exit" );
                        Console.ReadLine();
                    }
                }

                m_Closing = true;
            }
        }

Usage Example

Beispiel #1
0
        public static void Main(string[] args)
        {
            int    num1;
            string text1;
            int    num2;

            TextWriter[] writerArray1;
            AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(Core.CurrentDomain_UnhandledException);
            AppDomain.CurrentDomain.ProcessExit        += new EventHandler(Core.CurrentDomain_ProcessExit);
            bool flag1 = false;

            for (num1 = 0; (num1 < args.Length); ++num1)
            {
                if (Insensitive.Equals(args[num1], "-debug"))
                {
                    flag1 = true;
                }
                else if (Insensitive.Equals(args[num1], "-service"))
                {
                    Core.m_Service = true;
                }
                else if (Insensitive.Equals(args[num1], "-profile"))
                {
                    Core.Profiling = true;
                }
            }
            try
            {
                if (Core.m_Service)
                {
                    if (!Directory.Exists("Logs"))
                    {
                        Directory.CreateDirectory("Logs");
                    }
                    writerArray1    = new TextWriter[2];
                    writerArray1[0] = Console.Out;
                    writerArray1[1] = new FileLogger("Logs/Console.log");
                    Console.SetOut((Core.m_MultiConOut = new MultiTextWriter(writerArray1)));
                }
                else
                {
                    writerArray1    = new TextWriter[1];
                    writerArray1[0] = Console.Out;
                    Console.SetOut((Core.m_MultiConOut = new MultiTextWriter(writerArray1)));
                }
            }
            catch
            {
            }
            Core.m_Thread   = Thread.CurrentThread;
            Core.m_Process  = Process.GetCurrentProcess();
            Core.m_Assembly = Assembly.GetEntryAssembly();
            if (Core.m_Thread != null)
            {
                Core.m_Thread.Name = "Core Thread";
            }
            if (Core.BaseDirectory.Length > 0)
            {
                Directory.SetCurrentDirectory(Core.BaseDirectory);
            }
            Server.Timer.TimerThread thread1 = new Server.Timer.TimerThread();
            Core.timerThread      = new Thread(new ThreadStart(thread1.TimerMain));
            Core.timerThread.Name = "Timer Thread";
            while (!ScriptCompiler.Compile(flag1))
            {
                Console.WriteLine("Scripts: One or more scripts failed to compile or no script files were found.");
                Console.WriteLine(" - Press return to exit, or R to try again.");
                text1 = Console.ReadLine();
                if ((text1 == null) || (text1.ToLower() != "r"))
                {
                    return;
                }
            }
            Region.Load();
            Core.m_MessagePump = new MessagePump(new Listener(Listener.Port));
            Core.timerThread.Start();
            for (num2 = 0; (num2 < Map.AllMaps.Count); ++num2)
            {
                ((Map)Map.AllMaps[num2]).Tiles.Force();
            }
            NetState.Initialize();
            EventSink.InvokeServerStarted();
            try
            {
                while (!Core.m_Closing)
                {
                    Thread.Sleep(1);
                    Mobile.ProcessDeltaQueue();
                    Item.ProcessDeltaQueue();
                    Server.Timer.Slice();
                    Core.m_MessagePump.Slice();
                    NetState.ProcessDisposedQueue();
                    if (Core.Slice != null)
                    {
                        Core.Slice.Invoke();
                    }
                }
            }
            catch (Exception exception1)
            {
                Core.CurrentDomain_UnhandledException(null, new UnhandledExceptionEventArgs(exception1, true));
            }
            if (Core.timerThread.IsAlive)
            {
                Core.timerThread.Abort();
            }
        }