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);
        }
Esempio n. 2
0
 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...
                 }
             }
         }
     }
 }