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(); } }