public static int MakeGameServer(string serverName, int maxNumPlayers, string mapName, int currentNumPlayers, int ping, int timeOutSeconds, bool isServerPermanent)
        {
            (int gameServerPort, int gameMainPort) = GetAvailablePort();
            if (gameServerPort == -1) //No more servers available
            {
                return(gameServerPort);
            }

            string     mainServerIPForGameServerToConnectTo = IPAddress.Loopback.ToString();
            const byte InitialServerState = 0; //Reprsents Waiting
            Server     server             = new Server(serverName, InitialServerState, maxNumPlayers, mapName, currentNumPlayers, ping);

            ServersAvailable.Add(server);

            GameServerProcess gameServerProcess = new GameServerProcess(serverName, gameServerPort);

            gameServerProcess.StartInfo = new ProcessStartInfo
            {
                FileName     = Program.GameServerFileName,
                ArgumentList =
                {
                    "GameServer",
                    serverName,
                    maxNumPlayers.ToString(),
                    mapName,
                    gameServerPort.ToString(),
                    gameMainPort.ToString(),
                    timeOutSeconds.ToString(),
                    isServerPermanent.ToString(),
                    mainServerIPForGameServerToConnectTo,
                }
            };
            gameServerProcess.Start();
            gameServerProcess.EnableRaisingEvents = true;
            gameServerProcess.OnGameServerExited += OnGameServerExited;

            GameServerDict.Add(serverName, gameServerProcess);

            GameServerComms gameServerConnection = new GameServerComms(serverName, gameMainPort);

            GameServerComms.GameServerConnection.Add(serverName, gameServerConnection);

            return(gameServerPort);
        }
        internal static void OnGameServerExited(object sender, GameServerArgs args)
        {
            string serverName = args.ServerName;
            int    port       = args.ServerPort;

            PortQueue.Enqueue(port);

            Output.WriteLine("" +
                             $"\n-------------------------------------------" +
                             $"\nGameServer: {serverName} exited..." +
                             $"\n-------------------------------------------");


            lock (ServersAvailable)
            {
                int serverIndexToDelete = -1;
                for (int serverCount = 0; serverCount < ServersAvailable.Count; serverCount++)
                {
                    if (ServersAvailable[serverCount].MatchesName(serverName))
                    {
                        serverIndexToDelete = serverCount;
                    }
                }
                if (serverIndexToDelete != -1)
                {
                    ServersAvailable.RemoveAt(serverIndexToDelete);
                }

                GameServerDict.Remove(serverName);
                GameServerComms.GameServerConnection.Remove(serverName);
            }

            if (serverName == "Welcome")
            {
                MakePersistentServer();
            }
        }