Example #1
0
        public virtual bool StartGame()
        {
            if (IsDestroyed)
            {
                return(false);
            }

            var region = "";

            propertiesList.Set(MsfDictKeys.isPublic, "false");

            // Extract the region if available
            if (propertiesList.Has(MsfDictKeys.region))
            {
                region = propertiesList.AsString(MsfDictKeys.region);
            }

            var task = Module.SpawnersModule.Spawn(propertiesList, region, GenerateOptions());

            if (task == null)
            {
                BroadcastChatMessage("Servers are busy", true);
                return(false);
            }

            State = LobbyState.StartingGameServer;

            SetGameSpawnTask(task);

            return(true);
        }
        /// <summary>
        /// Start process on spawner side with given spawn <paramref name="options"/>, <paramref name="region"/> and <paramref name="customOptions"/>
        /// </summary>
        /// <param name="options"></param>
        /// <param name="region"></param>
        /// <param name="customOptions"></param>
        /// <returns></returns>
        public virtual SpawnTask Spawn(DictionaryOptions options, string region, DictionaryOptions customOptions)
        {
            // Get registered spawner by options and region
            var spawners = GetFilteredSpawners(options, region);

            if (spawners.Count == 0)
            {
                logger.Warn($"No spawner was returned after filtering. Region: {options.AsString(MsfDictKeys.region, "International")}");
                return(null);
            }

            // Order from least busy server
            var orderedSpawners  = spawners.OrderByDescending(s => s.CalculateFreeSlotsCount());
            var availableSpawner = orderedSpawners.FirstOrDefault(s => s.CanSpawnAnotherProcess());

            // Ignore, if all of the spawners are busy
            if (availableSpawner == null)
            {
                return(null);
            }

            return(Spawn(options, customOptions, availableSpawner));
        }