Exemplo n.º 1
0
        static ServerStatus hostServer(ServerSettings settings)
        {
            Server server = new Server(settings);

            try
            {
                server.hostingLoop();
            }
            catch (Exception e)
            {
                //Write an error log
                TextWriter writer = File.CreateText("KLFServerlog.txt");

                writer.WriteLine(e.ToString());
                if (server.threadExceptionStackTrace != null && server.threadExceptionStackTrace.Length > 0)
                {
                    writer.Write("Stacktrace: ");
                    writer.WriteLine(server.threadExceptionStackTrace);
                }

                writer.Close();

                Console.WriteLine();

                Console.ForegroundColor = ConsoleColor.Red;
                Server.stampedConsoleWriteLine("Unexpected exception encountered! Crash report written to KLFServerlog.txt");
                Console.WriteLine(e.ToString());
                if (server.threadExceptionStackTrace != null && server.threadExceptionStackTrace.Length > 0)
                {
                    Console.Write("Stacktrace: ");
                    Console.WriteLine(server.threadExceptionStackTrace);
                }

                Console.WriteLine();
                Console.ResetColor();
                //server.clearState();
                //return ServerStatus.CRASHED;
            }

            server.clearState();

            if (server.stop)
                return ServerStatus.STOPPED;

            if (!settings.autoRestart || server.quit)
                return ServerStatus.QUIT;

            return ServerStatus.RESTARTING;
        }
Exemplo n.º 2
0
 static ServerStatus HostServer(ServerSettings s)
 {
     //main server instance
     Server server = new Server(s);
     try
     {
         server.HostingLoop();
     }
     catch (Exception e)
     {
         //Write an error log
         TextWriter writer = File.CreateText("KLFServerlog.txt");
         writer.WriteLine(e.ToString());
         if(server.CurrentThreadExceptionStackTrace != null
         && server.CurrentThreadExceptionStackTrace.Length > 0)
         {
             writer.Write("Stacktrace: ");
             writer.WriteLine(server.CurrentThreadExceptionStackTrace);
         }
         writer.Close();
         Console.WriteLine();
         Console.ForegroundColor = ConsoleColor.Red;
         Server.StampedConsoleWriteLine("Unexpected exception encountered! Crash report written to KLFServerlog.txt");
         Console.WriteLine(e.ToString());
         if(server.CurrentThreadExceptionStackTrace != null
         && server.CurrentThreadExceptionStackTrace.Length > 0)
         {
             Console.Write("Stacktrace: ");
             Console.WriteLine(server.CurrentThreadExceptionStackTrace);
         }
         Console.WriteLine();
         Console.ResetColor();
         //server.clearState();
         //return ServerStatus.Crashed;
     }
     server.ClearState();
     if (server.Stop)
         return ServerStatus.Stopped;
     if (!s.AutoRestart || server.Quit)
         return ServerStatus.Quit;
     return ServerStatus.Restarting;
 }
Exemplo n.º 3
0
        static void Main(string[] args)
        {
            Console.Title = "KLF Server " + KLFCommon.PROGRAM_VERSION;
            Console.WriteLine("KLF Server version " + KLFCommon.PROGRAM_VERSION);
            Console.WriteLine("Created by Alfred Lam");
            Console.WriteLine();

            ServerSettings settings = new ServerSettings();
            settings.readConfigFile();
            bool firstLoop = true;

            while (true)
            {
                Console.WriteLine();

                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Port: ");

                Console.ResetColor();
                Console.WriteLine(settings.port);

                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("HTTP Port: ");

                Console.ResetColor();
                Console.WriteLine(settings.httpPort);

                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Max Clients: ");

                Console.ResetColor();
                Console.WriteLine(settings.maxClients);

                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Join Message: ");

                Console.ResetColor();
                Console.WriteLine(settings.joinMessage);

                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Server Info: ");

                Console.ResetColor();
                Console.WriteLine(settings.serverInfo);

                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Updates Per Second: ");

                Console.ResetColor();
                Console.WriteLine(settings.updatesPerSecond);

                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Total Inactive Ships: ");

                Console.ResetColor();
                Console.WriteLine(settings.totalInactiveShips);

                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Screenshot Height: ");

                Console.ResetColor();
                Console.WriteLine(settings.screenshotSettings.maxHeight);

                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Screenshot Interval: ");

                Console.ResetColor();
                Console.WriteLine(settings.screenshotInterval + "ms");

                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Save Screenshots: ");

                Console.ResetColor();
                Console.WriteLine(settings.saveScreenshots);

                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Auto-Restart: ");

                Console.ResetColor();
                Console.WriteLine(settings.autoRestart);

                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Auto-Host: ");

                Console.ResetColor();
                Console.WriteLine(settings.autoHost);

                Console.ResetColor();
                Console.WriteLine();
                Console.WriteLine("P: change port, HP: change http port, M: change max clients");
                Console.WriteLine("J: join message, IF: server info, U: updates per second, IS: total inactive ships");
                Console.WriteLine("SH: screenshot height, SI: screenshot interval, SV: save screenshots");
                Console.WriteLine("AR: toggle auto-restart, AH: toggle auto-host");
                Console.WriteLine("H: begin hosting, Q: quit");

                String in_string;
                if (settings.autoHost && firstLoop)
                {
                    in_string = "h";
                }
                else
                {
                    in_string = Console.ReadLine().ToLower();
                }
                firstLoop = false;

                if (in_string == "q")
                {
                    break;
                }
                else if (in_string == "p")
                {
                    Console.Write("Enter the Port: ");

                    int new_port;
                    if (int.TryParse(Console.ReadLine(), out new_port))
                    {
                        settings.port = new_port;
                        settings.writeConfigFile();
                    }
                    else
                    {
                        Console.WriteLine("Invalid port ["
                            + IPEndPoint.MinPort + '-'
                            + IPEndPoint.MaxPort + ']');
                    }
                }
                else if (in_string == "hp")
                {
                    Console.Write("Enter the HTTP Port: ");

                    int new_port;
                    if (int.TryParse(Console.ReadLine(), out new_port))
                    {
                        settings.httpPort = new_port;
                        settings.writeConfigFile();
                    }
                    else
                    {
                        Console.WriteLine("Invalid port ["
                            + IPEndPoint.MinPort + '-'
                            + IPEndPoint.MaxPort + ']');
                    }
                }
                else if (in_string == "m")
                {
                    Console.Write("Enter the max number of clients: ");

                    int new_value;
                    if (int.TryParse(Console.ReadLine(), out new_value) && new_value > 0)
                    {
                        settings.maxClients = new_value;
                        settings.writeConfigFile();
                    }
                    else
                        Console.WriteLine("Invalid number of clients");
                }
                else if (in_string == "j")
                {
                    Console.Write("Enter the join message: ");
                    settings.joinMessage = Console.ReadLine();
                    settings.writeConfigFile();
                }
                else if (in_string == "if")
                {
                    Console.Write("Enter the server info message: ");
                    settings.serverInfo = Console.ReadLine();
                    settings.writeConfigFile();
                }
                else if (in_string == "u")
                {
                    Console.Write("Enter the number of updates to receive per second: ");
                    float new_value;
                    if (float.TryParse(Console.ReadLine(), out new_value))
                    {
                        settings.updatesPerSecond = new_value;
                        settings.writeConfigFile();
                    }
                    else
                    {
                        Console.WriteLine("Invalid updates per second ["
                            + ServerSettings.MIN_UPDATES_PER_SECOND + '-'
                            + ServerSettings.MAX_UPDATES_PER_SECOND + ']');
                    }
                }
                else if (in_string == "sh")
                {
                    Console.Write("Enter the screenshot height: ");
                    int new_value;
                    if (int.TryParse(Console.ReadLine(), out new_value))
                    {
                        settings.screenshotSettings.maxHeight = new_value;
                        settings.writeConfigFile();
                    }
                    else
                    {
                        Console.WriteLine("Invalid screenshot height.");
                    }
                }
                else if (in_string == "si")
                {
                    Console.Write("Enter the screenshot interval: ");
                    int new_value;
                    if (int.TryParse(Console.ReadLine(), out new_value))
                    {
                        settings.screenshotInterval = new_value;
                        settings.writeConfigFile();
                    }
                }
                else if (in_string == "is")
                {
                    Console.Write("Enter the total number of inactive ships: ");
                    byte new_value;
                    if (byte.TryParse(Console.ReadLine(), out new_value))
                    {
                        settings.totalInactiveShips = new_value;
                        settings.writeConfigFile();
                    }
                    else
                    {
                        Console.WriteLine("Invalid total inactive ships ["
                            + Byte.MinValue + '-'
                            + Byte.MaxValue + ']');
                    }
                }
                else if (in_string == "sv")
                {
                    settings.saveScreenshots = !settings.saveScreenshots;
                    settings.writeConfigFile();
                }
                else if (in_string == "ar")
                {
                    settings.autoRestart = !settings.autoRestart;
                    settings.writeConfigFile();
                }
                else if (in_string == "ah")
                {
                    settings.autoHost = !settings.autoHost;
                    settings.writeConfigFile();
                }
                else if (in_string == "h")
                {
                    ServerStatus status = hostServer(settings);
                    while (status == ServerStatus.RESTARTING)
                    {
                        System.Threading.Thread.Sleep(AUTO_RESTART_DELAY);
                        status = hostServer(settings);
                    }

                    if (status == ServerStatus.QUIT)
                    {
                        Console.WriteLine("Press any key to quit");
                        Console.ReadKey();

                        break;
                    }
                    else
                    {
                        Console.WriteLine("Server "+Enum.GetName(typeof(ServerStatus), status).ToLower());
                    }
                }

            }
        }
Exemplo n.º 4
0
        static void Main(string[] args)
        {
            Console.Title = "KLF Server " + KLFCommon.ProgramVersion;
            Console.WriteLine("KLF Server Copyright (C) 2013 Alfred Lam");
            Console.WriteLine("This program comes with ABSOLUTELY NO WARRANTY; for details type `/show'.");
            Console.WriteLine("This is free software, and you are welcome to redistribute it");
            Console.WriteLine("under certain conditions; type `/show' for details.");
            Console.WriteLine();

            Configuration = ServerSettings.Load(Path.Combine("./", Filename));
            if(Configuration == null)
            {
                Configuration = new ServerSettings();//default cfg
                Configuration.Save(Path.Combine("./", Filename));
            }

            bool goodState = true;
            if(Configuration.AutoHost)
                goodState = ServerLoop();//jump right in
            while (goodState)
            {
                Console.WriteLine();
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Port: ");
                Console.ResetColor();
                Console.WriteLine(Configuration.Port);
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("HTTP Port: ");
                Console.ResetColor();
                Console.WriteLine(Configuration.HttpPort);
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Max Clients: ");
                Console.ResetColor();
                Console.WriteLine(Configuration.MaxClients);
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Join Message: ");
                Console.ResetColor();
                Console.WriteLine(Configuration.JoinMessage);
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Server Info: ");
                Console.ResetColor();
                Console.WriteLine(Configuration.ServerInfo);
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Updates Per Second: ");
                Console.ResetColor();
                Console.WriteLine(Configuration.UpdatesPerSecond);
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Total Inactive Ships: ");
                Console.ResetColor();
                Console.WriteLine(Configuration.TotalInactiveShips);
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Screenshot Height: ");
                Console.ResetColor();
                Console.WriteLine(Configuration.ScreenshotSettings.MaxHeight);
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Screenshot Interval: ");
                Console.ResetColor();
                Console.WriteLine(Configuration.ScreenshotInterval + "ms");
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Screenshot Backlog: ");
                Console.ResetColor();
                Console.WriteLine(Configuration.ScreenshotBacklog);
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Save Screenshots: ");
                Console.ResetColor();
                Console.WriteLine(Configuration.SaveScreenshots);
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Auto-Restart: ");
                Console.ResetColor();
                Console.WriteLine(Configuration.AutoRestart);
                Console.ForegroundColor = ConsoleColor.Green;
                Console.Write("Auto-Host: ");
                Console.ResetColor();
                Console.WriteLine(Configuration.AutoHost);
                Console.ResetColor();
                Console.WriteLine();
                Console.WriteLine("/port    change port");
                Console.WriteLine("/http    change http port");
                Console.WriteLine("/max     change max clients");
                Console.WriteLine("/motd    join message");
                Console.WriteLine("/info    server info");
                Console.WriteLine("/rate    updates per second");
                Console.WriteLine("/ships   total inactive ships");
                Console.WriteLine("/size    screenshot height");
                Console.WriteLine("/shutter screenshot interval");
                Console.WriteLine("/album   screenshot save");
                Console.WriteLine("/recent  screenshot backlog");
                Console.WriteLine("/auto    toggle auto-restart");
                Console.WriteLine("/quick   toggle auto-host on startup");
                Console.WriteLine("/host    begin hosting");
                Console.WriteLine("/quit    quit");

                String[] MenuArgs = Console.ReadLine().Split(' ');
                switch(MenuArgs[0].ToLowerInvariant())
                {
                    case "/quit":
                        goodState = false;
                        break;
                    case "/port":
                        Console.Write("Enter the Port: ");
                        int newServerPort;
                        if (int.TryParse(Console.ReadLine(), out newServerPort))
                        {
                            Configuration.Port = newServerPort;
                            Configuration.Save();
                        }
                        else
                            Console.WriteLine("Invalid port ["
                                             + IPEndPoint.MinPort + '-'
                                             + IPEndPoint.MaxPort + ']'
                                             );
                        break;
                    case "/http":
                        Console.Write("Enter the HTTP Port: ");
                        int newHttpPort;
                        if (int.TryParse(Console.ReadLine(), out newHttpPort))
                        {
                            Configuration.HttpPort = newHttpPort;
                            Configuration.Save();
                        }
                        else
                            Console.WriteLine("Invalid port ["
                                             + IPEndPoint.MinPort + '-'
                                             + IPEndPoint.MaxPort + ']'
                                             );
                        break;
                    case "/max":
                        Console.Write("Enter the max number of clients: ");
                        int newMax;
                        if (int.TryParse(Console.ReadLine(), out newMax) && newMax > 0)
                        {
                            Configuration.MaxClients = newMax;
                            Configuration.Save();
                        }
                        else
                            Console.WriteLine("Invalid number of clients");
                        break;
                    case "/motd":
                        Console.Write("Enter the join message: ");
                        Configuration.JoinMessage = Console.ReadLine();
                        Configuration.Save();
                        break;
                    case "/info":
                        Console.Write("Enter the server info message: ");
                        Configuration.ServerInfo = Console.ReadLine();
                        Configuration.Save();
                        break;
                    case "/rate":
                        Console.Write("Enter the number of updates to receive per second: ");
                        float newRate;
                        if (float.TryParse(Console.ReadLine(), out newRate))
                        {
                            Configuration.UpdatesPerSecond = newRate;
                            Configuration.Save();
                        }
                        else
                            Console.WriteLine("Invalid updates per second ("
                                             + ServerSettings.MinUpdatesPerSecond + ".."
                                             + ServerSettings.MaxUpdatesPerSecond + ")"
                                             );
                        break;
                    case "/size":
                        Console.Write("Enter the screenshot height: ");
                        int newHeight;
                        if (int.TryParse(Console.ReadLine(), out newHeight))
                        {
                            Configuration.ScreenshotSettings.MaxHeight = newHeight;
                            Configuration.Save();
                        }
                        else
                            Console.WriteLine("Invalid screenshot height.");
                        break;
                    case "/shutter":
                        Console.Write("Enter the screenshot interval: ");
                        int newShutterSpeed;
                        if (int.TryParse(Console.ReadLine(), out newShutterSpeed))
                        {
                            Configuration.ScreenshotInterval = newShutterSpeed;
                            Configuration.Save();
                        }
                        break;
                    case "/recent":
                        Console.Write("Enter the screenshot backlog: ");
                        int newRecentCount;
                        if (int.TryParse(Console.ReadLine(), out newRecentCount) && newRecentCount >= 1)
                        {
                            Configuration.ScreenshotBacklog = newRecentCount;
                            Configuration.Save();
                        }
                        break;
                    case "/ships":
                        Console.Write("Enter the total number of inactive ships: ");
                        byte newTrash;
                        if (byte.TryParse(Console.ReadLine(), out newTrash))
                        {
                            Configuration.TotalInactiveShips = newTrash;
                            Configuration.Save();
                        }
                        else
                            Console.WriteLine("Invalid total inactive ships ["
                                             + Byte.MinValue + '-'
                                             + Byte.MaxValue + ']'
                                             );
                        break;
                    case "/album":
                        Configuration.SaveScreenshots = !Configuration.SaveScreenshots;
                        Configuration.Save();
                        break;
                    case "/auto":
                        Configuration.AutoRestart = !Configuration.AutoRestart;
                        Configuration.Save();
                        break;
                    case "/quick":
                        Configuration.AutoHost = !Configuration.AutoHost;
                        Configuration.Save();
                        break;
                    case "/host":
                        goodState = ServerLoop();
                        break;
                    case "/show":
                        ShowLicense();
                        break;
                    //TODO cases for Flooding and Throttle settings
                    default:
                        break;
                }
            }
        }
Exemplo n.º 5
0
 //Methods
 public Server(ServerSettings s)
 {
     this.Configuration = s;
 }
Exemplo n.º 6
0
 //Methods
 public Server(ServerSettings settings)
 {
     this.settings = settings;
 }