protected virtual void StartSpawned() { Msf.Server.Spawners.RegisterSpawnedProcess(Msf.Args.SpawnId, Msf.Args.SpawnCode, (controller, error) => { if (controller == null) { logger.Error("Failed to register a spawned process: " + error); throw new Exception("Failed to register a spawned process: " + error); } // Set the static object, so that it can be used when creating a room IOGamesRoom.SpawnTaskController = controller; if (Msf.Args.IsProvided(Msf.Args.Names.WebGl)) { networkManager.useWebSockets = true; } var prop = controller.Properties; // Use the assigned port from cmd args networkManager.networkPort = Msf.Args.AssignedPort; // Setup game rules/configs var ioGamesModule = FindObjectOfType <IOGamesModule>(); BaseNetworkGameRule gameRule = null; if (prop.ContainsKey(IOGamesModule.GameRuleNameKey)) { gameRule = ioGamesModule.GetGameRule(prop[IOGamesModule.GameRuleNameKey]); if (gameRule != null) { gameRule.ReadConfigs(prop); } } networkManager.gameRule = gameRule; if (prop.ContainsKey(MsfDictKeys.MaxPlayers)) { networkManager.maxConnections = int.Parse(prop[MsfDictKeys.MaxPlayers]); } // Start the server networkManager.StartServerAndQuitIfCannotListen(); }); return; }