Example #1
0
        public static void Error(Int32 code, String fmt, params Object[] parameters)
        {
            if (recursive)
            {
                CoreSys.Error("recursive error after: " + msg);
            }

            recursive = true;
            msg       = Sprintf(fmt, parameters);
            if (code == Defines.ERR_DISCONNECT)
            {
                CL.Drop();
                recursive = false;
                throw new longjmpException();
            }
            else if (code == Defines.ERR_DROP)
            {
                Com.Printf("********************\\nERROR: " + msg + "\\n********************\\n");
                SV_MAIN.SV_Shutdown("Server crashed: " + msg + "\\n", false);
                CL.Drop();
                recursive = false;
                throw new longjmpException();
            }
            else
            {
                SV_MAIN.SV_Shutdown("Server fatal crashed: %s" + msg + "\\n", false);
                CL.Shutdown();
            }

            CoreSys.Error(msg);
        }
Example #2
0
        public static void Quit( )
        {
            SV_MAIN.SV_Shutdown("Server quit\\n", false);
            CL.Shutdown();
            if (Globals.logfile != null)
            {
                try
                {
                    Globals.logfile.Close();
                }
                catch (IOException e)
                {
                }

                Globals.logfile = null;
            }

            CoreSys.Quit();
        }
Example #3
0
        public static void Error(int code, string fmt, params object[] vargs)
        {
            // va_list argptr;
            // static char msg[MAXPRINTMSG];

            if (Com.recursive)
            {
                Sys.Error("recursive error after: " + Com.msg);
            }

            Com.recursive = true;

            Com.msg = Com.sprintf(fmt, vargs);

            if (code == Defines.ERR_DISCONNECT)
            {
                Cl.Drop();
                Com.recursive = false;

                return;
            }

            if (code == Defines.ERR_DROP)
            {
                Com.Printf("********************\nERROR: " + Com.msg + "\n********************\n");
                SV_MAIN.SV_Shutdown("Server crashed: " + Com.msg + "\n", false);
                Cl.Drop();
                Com.recursive = false;

                return;
            }

            SV_MAIN.SV_Shutdown("Server fatal crashed: %s" + Com.msg + "\n", false);
            Cl.Shutdown();

            Sys.Error(Com.msg);
        }
Example #4
0
        public static void Init(String[] args)
        {
            try
            {
                Com.InitArgv(args);
                Cbuf.Init();
                Cmd.Init();
                Cvar.Init();
                Key.Init();
                Cbuf.AddEarlyCommands(false);
                Cbuf.Execute();
                if (Globals.dedicated.value != 1F)
                {
                    Program.Q2Dialog.SetStatus("initializing filesystem...");
                }
                FS.InitFilesystem();
                if (Globals.dedicated.value != 1F)
                {
                    Program.Q2Dialog.SetStatus("loading config...");
                }
                Reconfigure(false);
                FS.SetCDDir();
                FS.MarkBaseSearchPaths();
                if (Globals.dedicated.value != 1F)
                {
                    Program.Q2Dialog.TestQ2Data();
                }
                Reconfigure(true);
                Cmd.AddCommand("error", Com.Error_f);
                Globals.host_speeds    = Cvar.Get("host_speeds", "0", 0);
                Globals.log_stats      = Cvar.Get("log_stats", "0", 0);
                Globals.developer      = Cvar.Get("developer", "0", CVAR_ARCHIVE);
                Globals.timescale      = Cvar.Get("timescale", "0", 0);
                Globals.fixedtime      = Cvar.Get("fixedtime", "0", 0);
                Globals.logfile_active = Cvar.Get("logfile", "0", 0);
                Globals.showtrace      = Cvar.Get("showtrace", "0", 0);
                Globals.dedicated      = Cvar.Get("dedicated", "0", CVAR_NOSET);
                var s = Com.Sprintf("%4.2f %s %s %s", Globals.VERSION, CPUSTRING, Globals.__DATE__, BUILDSTRING);
                Cvar.Get("version", s, CVAR_SERVERINFO | CVAR_NOSET);
                if (Globals.dedicated.value != 1F)
                {
                    Program.Q2Dialog.SetStatus("initializing network subsystem...");
                }
                NET.Init();
                Netchan.Netchan_Init();
                if (Globals.dedicated.value != 1F)
                {
                    Program.Q2Dialog.SetStatus("initializing server subsystem...");
                }
                SV_MAIN.SV_Init();
                if (Globals.dedicated.value != 1F)
                {
                    Program.Q2Dialog.SetStatus("initializing client subsystem...");
                }
                CL.Init();
                if (!Cbuf.AddLateCommands())
                {
                    if (Globals.dedicated.value == 0)
                    {
                        Cbuf.AddText("d1\\n");
                    }
                    else
                    {
                        Cbuf.AddText("dedicated_start\\n");
                    }
                    Cbuf.Execute();
                }
                else
                {
                    SCR.EndLoadingPlaque();
                }

                Com.Printf("====== Quake2 Initialized ======\\n\\n");
                CL.WriteConfiguration();
                if (Globals.dedicated.value != 1F)
                {
                    Program.Q2Dialog.Dispose();
                }
            }
            catch (longjmpException e)
            {
                CoreSys.Error("Error during initialization");
            }
        }
Example #5
0
        public static void Frame(Int32 msec)
        {
            try
            {
                if (Globals.log_stats.modified)
                {
                    Globals.log_stats.modified = false;
                    if (Globals.log_stats.value != 0F)
                    {
                        if (Globals.log_stats_file != null)
                        {
                            try
                            {
                                Globals.log_stats_file.Close();
                            }
                            catch (IOException e)
                            {
                            }

                            Globals.log_stats_file = null;
                        }

                        try
                        {
                            Globals.log_stats_file = new QuakeFile("stats.log", FileAccess.ReadWrite);
                        }
                        catch (IOException e)
                        {
                            Globals.log_stats_file = null;
                        }

                        if (Globals.log_stats_file != null)
                        {
                            try
                            {
                                var bytes = Encoding.ASCII.GetBytes("entities,dlights,parts,frame time\\n");
                                Globals.log_stats_file.Write(bytes);
                            }
                            catch (IOException e)
                            {
                            }
                        }
                    }
                    else
                    {
                        if (Globals.log_stats_file != null)
                        {
                            try
                            {
                                Globals.log_stats_file.Close();
                            }
                            catch (IOException e)
                            {
                            }

                            Globals.log_stats_file = null;
                        }
                    }
                }

                if (Globals.fixedtime.value != 0F)
                {
                    msec = ( Int32 )Globals.fixedtime.value;
                }
                else if (Globals.timescale.value != 0F)
                {
                    msec = ( Int32 )(msec * Globals.timescale.value);
                    if (msec < 1)
                    {
                        msec = 1;
                    }
                }

                if (Globals.showtrace.value != 0F)
                {
                    Com.Printf("%4i traces  %4i points\\n", Globals.c_traces, Globals.c_pointcontents);
                    Globals.c_traces        = 0;
                    Globals.c_brush_traces  = 0;
                    Globals.c_pointcontents = 0;
                }

                Cbuf.Execute();
                var time_before  = 0;
                var time_between = 0;
                var time_after   = 0;
                if (Globals.host_speeds.value != 0F)
                {
                    time_before = Timer.Milliseconds();
                }
                Com.debugContext = "SV:";
                SV_MAIN.SV_Frame(msec);
                if (Globals.host_speeds.value != 0F)
                {
                    time_between = Timer.Milliseconds();
                }
                Com.debugContext = "CL:";
                CL.Frame(msec);
                if (Globals.host_speeds.value != 0F)
                {
                    time_after = Timer.Milliseconds();
                    var all = time_after - time_before;
                    var sv  = time_between - time_before;
                    var cl  = time_after - time_between;
                    var gm  = Globals.time_after_game - Globals.time_before_game;
                    var rf  = Globals.time_after_ref - Globals.time_before_ref;
                    sv -= gm;
                    cl -= rf;
                    Com.Printf("all:%3i sv:%3i gm:%3i cl:%3i rf:%3i\\n", all, sv, gm, cl, rf);
                }
            }
            catch (longjmpException e)
            {
                Com.DPrintf("longjmp exception:" + e);
            }
        }
Example #6
0
        /**
         * This function initializes the different subsystems of
         * the game engine. The setjmp/longjmp mechanism of the original
         * was replaced with exceptions.
         * @param args the original unmodified command line arguments
         */
        public static void Init(string[] args)
        {
            try
            {
                // prepare enough of the subsystems to handle
                // cvar and command buffer management
                Com.InitArgv(args);

                Cbuf.Init();

                Cmd.Init();
                Cvar.Init();

                Key.Init();

                // we need to add the early commands twice, because
                // a basedir or cddir needs to be set before execing
                // config files, but we want other parms to override
                // the settings of the config files
                Cbuf.AddEarlyCommands(false);
                Cbuf.Execute();

                if (Globals.dedicated.value != 1.0f)
                {
                    Console.WriteLine("initializing filesystem...");
                }

                FS.InitFilesystem();

                if (Globals.dedicated.value != 1.0f)
                {
                    Console.WriteLine("loading config...");
                }

                Qcommon.reconfigure(false);

                FS.markBaseSearchPaths();                 // mark the default search paths

                Qcommon.reconfigure(true);                // reload default.cfg and config.cfg

                //
                // init commands and vars
                //
                Cmd.AddCommand("error", Com.Error_f);

                Globals.host_speeds    = Cvar.Get("host_speeds", "0", 0);
                Globals.log_stats      = Cvar.Get("log_stats", "0", 0);
                Globals.developer      = Cvar.Get("developer", "0", Defines.CVAR_ARCHIVE);
                Globals.timescale      = Cvar.Get("timescale", "0", 0);
                Globals.fixedtime      = Cvar.Get("fixedtime", "0", 0);
                Globals.logfile_active = Cvar.Get("logfile", "0", 0);
                Globals.showtrace      = Cvar.Get("showtrace", "0", 0);
                Globals.dedicated      = Cvar.Get("dedicated", "0", Defines.CVAR_NOSET);
                var s = Com.sprintf("%4.2f %s %s %s", Globals.VERSION, Qcommon.CPUSTRING, Globals.__DATE__, Qcommon.BUILDSTRING);

                Cvar.Get("version", s, Defines.CVAR_SERVERINFO | Defines.CVAR_NOSET);

                if (Globals.dedicated.value != 1.0f)
                {
                    Console.WriteLine("initializing network subsystem...");
                }

                NET.Init();                 //ok
                Netchan.Netchan_Init();     //ok

                if (Globals.dedicated.value != 1.0f)
                {
                    Console.WriteLine("initializing server subsystem...");
                }

                SV_MAIN.SV_Init();                 //ok

                if (Globals.dedicated.value != 1.0f)
                {
                    Console.WriteLine("initializing client subsystem...");
                }

                Cl.Init();

                // add + commands from command line
                if (!Cbuf.AddLateCommands())
                {
                    // if the user didn't give any commands, run default action
                    if (Globals.dedicated.value == 0)
                    {
                        Cbuf.AddText("d1\n");
                    }
                    else
                    {
                        Cbuf.AddText("dedicated_start\n");
                    }

                    Cbuf.Execute();
                }
                else
                {
                    // the user asked for something explicit
                    // so drop the loading plaque
                    SCR.EndLoadingPlaque();
                }

                Com.Printf("====== Quake2 Initialized ======\n\n");

                // save config when configuration is completed
                Cl.WriteConfiguration();
            }
            catch (Exception)
            {
                Sys.Error("Error during initialization");
            }
        }
Example #7
0
        /**
         * Trigger generation of a frame for the given time. The setjmp/longjmp
         * mechanism of the original was replaced with exceptions.
         * @param msec the current game time
         */
        public static void FrameUpdate(int msec)
        {
            try
            {
                if (Globals.log_stats.modified)
                {
                    Globals.log_stats.modified = false;

                    if (Globals.log_stats.value != 0.0f)
                    {
                        if (Globals.log_stats_file != null)
                        {
                            try
                            {
                                Globals.log_stats_file.Close();
                            }
                            catch (Exception)
                            {
                            }

                            Globals.log_stats_file = null;
                        }

                        try
                        {
                            Globals.log_stats_file = File.CreateText("stats.log");
                        }
                        catch (Exception)
                        {
                            Globals.log_stats_file = null;
                        }

                        if (Globals.log_stats_file != null)
                        {
                            try
                            {
                                Globals.log_stats_file.Write("entities,dlights,parts,frame time\n");
                            }
                            catch (Exception)
                            {
                            }
                        }
                    }
                    else
                    {
                        if (Globals.log_stats_file != null)
                        {
                            try
                            {
                                Globals.log_stats_file.Close();
                            }
                            catch (Exception)
                            {
                            }

                            Globals.log_stats_file = null;
                        }
                    }
                }

                if (Globals.fixedtime.value != 0.0f)
                {
                    msec = (int)Globals.fixedtime.value;
                }
                else if (Globals.timescale.value != 0.0f)
                {
                    msec = (int)(msec * Globals.timescale.value);

                    if (msec < 1)
                    {
                        msec = 1;
                    }
                }

                if (Globals.showtrace.value != 0.0f)
                {
                    Com.Printf("%4i traces  %4i points\n", Globals.c_traces, Globals.c_pointcontents);

                    Globals.c_traces        = 0;
                    Globals.c_brush_traces  = 0;
                    Globals.c_pointcontents = 0;
                }

                Cbuf.Execute();

                var time_before = 0;
                var time_after  = 0;

                if (Globals.host_speeds.value != 0.0f)
                {
                    time_before = Timer.Milliseconds();
                }

                Com.debugContext = "SV:";
                SV_MAIN.SV_Frame(msec);

                if (Globals.host_speeds.value != 0.0f)
                {
                    time_after = Timer.Milliseconds();

                    var sv = time_after - time_before;
                    var gm = Globals.time_after_game - Globals.time_before_game;
                    var rf = Globals.time_after_ref - Globals.time_before_ref;
                    sv -= gm;

                    Com.Printf("update:%3i gm:%3i rf:%3i\n", sv, gm, rf);
                }
            }
            catch (Exception e)
            {
                Com.DPrintf("exception:" + e);
            }
        }