public void ValidateNumHeartbeats() { // test for NumHeartBeatsForActivateResponse dynamic config = GetValidConfig(); config.NumHeartBeatsForActivateResponse = 0; MultiplayerSettings settings = JsonConvert.DeserializeObject <MultiplayerSettings>(config.ToString()); settings.SetDefaultsIfNotSpecified(); new MultiplayerSettingsValidator(settings, _mockSystemOperations.Object).IsValid().Should().BeFalse(); // test for NumHeartBeatsForTerminateResponse config = GetValidConfig(); config.NumHeartBeatsForTerminateResponse = 0; settings = JsonConvert.DeserializeObject <MultiplayerSettings>(config.ToString()); settings.SetDefaultsIfNotSpecified(); new MultiplayerSettingsValidator(settings, _mockSystemOperations.Object).IsValid().Should().BeFalse(); // test for NumHeartBeatsForTerminateResponse and NumHeartBeatsForActivateResponse config = GetValidConfig(); config.NumHeartBeatsForTerminateResponse = 10; config.NumHeartBeatsForActivateResponse = 10; settings = JsonConvert.DeserializeObject <MultiplayerSettings>(config.ToString()); settings.SetDefaultsIfNotSpecified(); new MultiplayerSettingsValidator(settings, _mockSystemOperations.Object).IsValid().Should().BeFalse(); }
public void DefaultConfigIsInvalid() { MultiplayerSettings settings = JsonConvert.DeserializeObject <MultiplayerSettings>(DefaultConfig); settings.SetDefaultsIfNotSpecified(); new MultiplayerSettingsValidator(settings, _mockSystemOperations.Object).IsValid().Should().BeFalse(); }
public void SetMultiplayerSettings() { string filePath = PlatformerGame.OptionsPath + "Multiplayer Settings.platform"; if (!File.Exists(filePath)) // remember to create directory as well if it doesnt exist { settings = new MultiplayerSettings() { ServerIp = IPAddress.Any.ToString(), ServerPort = 9009, UpdateIntervals = 50, MinDeltaMove = 1f, SmoothMovement = true }; Serialization.SerializeJson(filePath, settings); } else { settings = Serialization.DeserializeJson <MultiplayerSettings>(filePath); } sendTimer = new Timer(SendDataCallBack, null, 0, settings.UpdateIntervals); ServerIp = settings.ServerIp; ServerPort = settings.ServerPort; connectedClients = new List <NetworkPlayer>(); previousClientStates = new List <NetworkPlayer>(); lerpProgress = new List <float>(); clients = new List <int>(); blockCells = new List <Cell>(); endPoint = new IPEndPoint(IPAddress.Parse(ServerIp), ServerPort); }
private void OpenMultiplayerSettings(object sender, RoutedEventArgs e) { var multiplayerSettingsDialog = new MultiplayerSettings(); multiplayerSettingsDialog.Owner = Window.GetWindow(this); multiplayerSettingsDialog.ShowDialog(); }
public void ValidConfigReturnsValid() { dynamic config = GetValidConfig(); MultiplayerSettings settings = JsonConvert.DeserializeObject <MultiplayerSettings>(config.ToString()); settings.SetDefaultsIfNotSpecified(); new MultiplayerSettingsValidator(settings, _mockSystemOperations.Object).IsValid().Should().BeTrue(); }
public void EmptyNodePortInContainerModeShouldFail() { dynamic config = GetValidConfig(); config.RunContainer = true; config.PortMappingsList[0][0].NodePort = 0; MultiplayerSettings settings = JsonConvert.DeserializeObject <MultiplayerSettings>(config.ToString()); settings.SetDefaultsIfNotSpecified(); new MultiplayerSettingsValidator(settings, _mockSystemOperations.Object).IsValid().Should().BeFalse(); }
public void InvalidContainerStartCommandIsInvalid() { dynamic config = GetValidConfig(); config.RunContainer = true; config.ContainerStartParameters.StartGameCommand = @"C:\Assets\<your_game_server_exe>"; MultiplayerSettings settings = JsonConvert.DeserializeObject <MultiplayerSettings>(config.ToString()); settings.SetDefaultsIfNotSpecified(); new MultiplayerSettingsValidator(settings, _mockSystemOperations.Object).IsValid().Should().BeFalse(); }
public void StartGameCommandThatContainsMountPathShouldSucceed(string startGameCommand) { dynamic config = GetValidConfig(); config.RunContainer = true; config.AssetDetails[0].MountPath = "C:\\Assets"; config.ContainerStartParameters.StartGameCommand = startGameCommand; MultiplayerSettings settings = JsonConvert.DeserializeObject <MultiplayerSettings>(config.ToString()); settings.SetDefaultsIfNotSpecified(); new MultiplayerSettingsValidator(settings, _mockSystemOperations.Object).IsValid().Should().BeTrue(); }
private void Awake() { if (MultiplayerSettings.multiplayerSettings == null) { MultiplayerSettings.multiplayerSettings = this; } else if (MultiplayerSettings.multiplayerSettings != this) { Destroy(this.gameObject); } DontDestroyOnLoad(this.gameObject); }
private void Awake() { if (instance != null) { GameObject.Destroy(gameObject); } else { instance = this; DontDestroyOnLoad(gameObject); } }
private void Awake() { ///Keeps only one instance of MPSettings if (MultiplayerSettings.multiPlayerSettings == null) { MultiplayerSettings.multiPlayerSettings = this; } else if (MultiplayerSettings.multiPlayerSettings != this) { Destroy(this.gameObject); } DontDestroyOnLoad(this.gameObject); }
void Awake() { if (multiplayerSetting == null) { multiplayerSetting = this; } else { if (multiplayerSetting != this) { Destroy(gameObject); } } DontDestroyOnLoad(gameObject); }
void Awake() { if (Instance == null) { Instance = this; } else { if (Instance != this) { Destroy(this.gameObject); } } DontDestroyOnLoad(this.gameObject); }
private void Awake() { // Setup Singleton if (MultiplayerSettings.multiplayerSetting == null) { MultiplayerSettings.multiplayerSetting = this; } else { if (MultiplayerSettings.multiplayerSetting != this) { Destroy(this.gameObject); } } DontDestroyOnLoad(this.gameObject); }
/// <summary> /// </summary> private void CreateSettings() => Settings = new MultiplayerSettings(new List <IMultiplayerSettingsItem> { new MultiplayerSettingsRuleset("Game Mode", OnlineManager.CurrentGame.Ruleset.ToString().Replace("_", " ")), new MultiplayerSettingsMaxPlayers("Max Players", OnlineManager.CurrentGame.MaxPlayers.ToString()), new MultiplayerSettingsAutoHostRotation("Auto Host Rotation", MultiplayerSettingsText.BooleanToYesOrNo(OnlineManager.CurrentGame.HostRotation)), new MultiplayerSettingsFreeModType("Free Mod", MultiplayerSettingsFreeModType.FreeModTypeToString(MultiplayerFreeModType.Regular), MultiplayerFreeModType.Regular), new MultiplayerSettingsFreeModType("Free Rate", MultiplayerSettingsFreeModType.FreeModTypeToString(MultiplayerFreeModType.Rate), MultiplayerFreeModType.Rate), new MultiplayerSettingsHealthType("Health Type", ((MultiplayerHealthType)OnlineManager.CurrentGame.HealthType).ToString().Replace("_", " ")), new MultiplayerSettingsLives("Lives", OnlineManager.CurrentGame.Lives.ToString()), new MultiplayerSettingsAllowedGameModes("Allowed Game Modes", MultiplayerSettingsAllowedGameModes.AllowedModesToString(OnlineManager.CurrentGame.AllowedGameModes)), new MultiplayerSettingsMaximumSongLength("Maximum Song Length", MultiplayerSettingsMaximumSongLength.ToString(OnlineManager.CurrentGame.MaximumSongLength)), new MultiplayerSettingsDifficultyRange("Difficulty Range", MultiplayerSettingsDifficultyRange.ToString(OnlineManager.CurrentGame.MinimumDifficultyRating, OnlineManager.CurrentGame.MaximumDifficultyRating)), new MultiplayerSettingsLongNotePercentage("Long Note % Range", MultiplayerSettingsLongNotePercentage.ToString(OnlineManager.CurrentGame.MinimumLongNotePercentage, OnlineManager.CurrentGame.MaximumLongNotePercentage)) }) { Parent = Container, Position = new ScalableVector2(Map.X, Map.Y + Map.Height + 20) };
public void CertsWithDifferentPathAndNameSucceeds() { dynamic config = GetValidConfig(); MultiplayerSettings settings = JsonConvert.DeserializeObject <MultiplayerSettings>(config.ToString()); settings.SetDefaultsIfNotSpecified(); settings.GameCertificateDetails = new[] { new GameCertificateDetails() { Name = "test", Path = "C:\\mycert.pfx" }, new GameCertificateDetails() { Name = "test2", Path = "C:\\mycert2.pfx" } }; new MultiplayerSettingsValidator(settings, _mockSystemOperations.Object).IsValid().Should().BeTrue(); }
public void CertsNoExtensionPfxFails() { dynamic config = GetValidConfig(); MultiplayerSettings settings = JsonConvert.DeserializeObject <MultiplayerSettings>(config.ToString()); settings.SetDefaultsIfNotSpecified(); settings.GameCertificateDetails = new[] { new GameCertificateDetails() { Name = "cert1", Path = "C:\\test.pfxlala" }, new GameCertificateDetails() { Name = "cert2", Path = "C:\\test2.123" } }; new MultiplayerSettingsValidator(settings, _mockSystemOperations.Object).IsValid().Should().BeFalse(); }
public void SessionHostStartWithProcess() { dynamic config = GetValidConfig(); config.RunContainer = false; MultiplayerSettings settings = JsonConvert.DeserializeObject <MultiplayerSettings>(config.ToString()); settings.SetDefaultsIfNotSpecified(); new MultiplayerSettingsValidator(settings, _mockSystemOperations.Object).IsValid().Should().BeTrue(); SessionHostsStartInfo startInfo = settings.ToSessionHostsStartInfo(); startInfo.HostConfigOverrides.Should().BeNull(); startInfo.SessionHostType.Should().Be(SessionHostType.Process); foreach (AssetDetail assetDetail in startInfo.AssetDetails) { assetDetail.MountPath.Should().BeNull(); } }
public MultiplayerGameManagerService( IPlayFabService playFabService, ITokenService tokenService, IGameService gameService, IOptions <MultiplayerSettings> options, IMatchesRepository repository, ILogger <MultiplayerGameManagerService> logger) { _playFabService = playFabService; _tokenService = tokenService; _gameService = gameService; _repository = repository; _multiplayerSettings = options.Value; _logger = logger; if (_multiplayerSettings.Token.TicketStatusWait < 60000 / FREE_TIER_MAX_REQUESTS) { _logger.LogWarning($"PlayFab free tier limits the Get Matchmaking Ticket requests to a max of {FREE_TIER_MAX_REQUESTS} per minute. " + "A MatchmakingRateLimitExceeded error might occur while waiting for a multiplayer match"); } }
public void SessionHostStartWithContainer() { dynamic config = GetValidConfig(); config.RunContainer = true; MultiplayerSettings settings = JsonConvert.DeserializeObject <MultiplayerSettings>(config.ToString()); settings.SetDefaultsIfNotSpecified(); new MultiplayerSettingsValidator(settings, _mockSystemOperations.Object).IsValid().Should().BeTrue(); SessionHostsStartInfo startInfo = settings.ToSessionHostsStartInfo(); long expectedNanoCpus = (long)((double)config.ContainerStartParameters.ResourceLimits.Cpus * 1_000_000_000); long expectedMemory = config.ContainerStartParameters.ResourceLimits.MemoryGib * Math.Pow(1024, 3); startInfo.SessionHostType.Should().Be(SessionHostType.Container); startInfo.HostConfigOverrides.NanoCPUs.Should().Be(expectedNanoCpus); startInfo.HostConfigOverrides.Memory.Should().Be(expectedMemory); foreach (AssetDetail assetDetail in startInfo.AssetDetails) { assetDetail.MountPath.Should().NotBeNull(); } }
public static async Task Main(string[] args) { string[] salutations = { "Have a nice day!", "Thank you for using PlayFab Multiplayer Servers", "Check out our docs at aka.ms/playfabdocs!", "Have a question? Check our community at community.playfab.com" }; Console.WriteLine(salutations[new Random().Next(salutations.Length)]); string debuggingUrl = "https://github.com/PlayFab/gsdkSamples/blob/master/Debugging.md"; Console.WriteLine($"Check this page for debugging tips: {debuggingUrl}"); // lcow stands for Linux Containers On Windows => https://docs.microsoft.com/en-us/virtualization/windowscontainers/deploy-containers/linux-containers Globals.GameServerEnvironment = args.Contains("-lcow") && RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? GameServerEnvironment.Linux : GameServerEnvironment.Windows; // LocalMultiplayerAgent is running only on Windows for the time being MultiplayerSettings settings = JsonConvert.DeserializeObject <MultiplayerSettings>(File.ReadAllText("MultiplayerSettings.json")); settings.SetDefaultsIfNotSpecified(); MultiplayerSettingsValidator validator = new MultiplayerSettingsValidator(settings); if (!validator.IsValid()) { Console.WriteLine("The specified settings are invalid. Please correct them and re-run the agent."); Environment.Exit(1); } string vmId = $"xcloudwusu4uyz5daouzl:{settings.Region}:{Guid.NewGuid()}:tvmps_{Guid.NewGuid():N}{Guid.NewGuid():N}_d"; Console.WriteLine($"TitleId: {settings.TitleId}"); Console.WriteLine($"BuildId: {settings.BuildId}"); Console.WriteLine($"VmId: {vmId}"); Globals.Settings = settings; string rootOutputFolder = Path.Combine(settings.OutputFolder, "PlayFabVmAgentOutput", DateTime.Now.ToString("s").Replace(':', '-')); Console.WriteLine($"Root output folder: {rootOutputFolder}"); VmDirectories vmDirectories = new VmDirectories(rootOutputFolder); Globals.VmConfiguration = new VmConfiguration(settings.AgentListeningPort, vmId, vmDirectories); if (Globals.GameServerEnvironment == GameServerEnvironment.Linux && RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) { Globals.AdaptFolderPathsForLinuxContainersOnWindows(); // Linux Containers on Windows requires special folder mapping } Directory.CreateDirectory(rootOutputFolder); Directory.CreateDirectory(vmDirectories.GameLogsRootFolderVm); Directory.CreateDirectory(Globals.VmConfiguration.VmDirectories.CertificateRootFolderVm); IWebHost host = new WebHostBuilder() .UseKestrel() .UseUrls($"http://*:{settings.AgentListeningPort}") .UseContentRoot(Directory.GetCurrentDirectory()) .UseStartup <Startup>() .Build(); await host.StartAsync(); Console.WriteLine($"Local Multiplayer Agent is listening on port {settings.AgentListeningPort}"); Globals.SessionConfig = settings.SessionConfig ?? new SessionConfig() { SessionId = Guid.NewGuid() }; Console.WriteLine($"{string.Join(", ", Globals.SessionConfig.InitialPlayers)}"); await new MultiplayerServerManager(SystemOperations.Default, Globals.VmConfiguration, Globals.MultiLogger, SessionHostRunnerFactory.Instance) .CreateAndStartContainerWaitForExit(settings.ToSessionHostsStartInfo()); await host.StopAsync(); }