public SpawnedServerInfo SpawnNewPrivateServer(int players, string modName, string tempFolderName = "") { players = Math.Min(8, Math.Max(3, players)); SpawnedServerInfo serverProcess = ProcessSpawner.SpawnServer(players, modName, tempFolderName); byte[] payload = Encoding.ASCII.GetBytes($"B{serverProcess.Port}\t{serverProcess.Process.Id}\0"); socket.SendTo(payload, webApiListenerEndPoint); return(serverProcess); }
private static void LaunchNewServersWhenNeeded() { foreach (Mod mod in Constants.SupportedMods.Values) { const int maxPlayers = 8; for (int i = 3; i <= maxPlayers; i++) { if (IsNewServerNeeded(i, mod)) { try { var spawnedServer = ProcessSpawner.SpawnServer(i, mod.Name); int port = spawnedServer.Port; int processId = spawnedServer.Process.Id; Program.State.Servers.AddOrUpdate(port, new Server() { Port = port, ProcessId = processId, MaximumPlayers = i, CurrentPlayers = 1, Mod = mod, }, (prt, server) => { server.ProcessId = processId; server.MaximumPlayers = i; server.CurrentPlayers = 1; server.Mod = mod; return(server); }); } catch { // No free ports, cannot create process // Log... } } } } }