/// <summary> /// Requests the shutdown of a multiplayer server /// </summary> /// <returns> /// Boolean representing whether the call was successful or not /// </returns> public async Task <bool> ShutdownMultiplayerServer(string buildID, AzureRegion region, string sessionID) { if (IsAuthenticated()) { ShutdownMultiplayerServerRequest request = new ShutdownMultiplayerServerRequest(); request.BuildId = buildID; request.Region = region; request.SessionId = sessionID; var task = PlayFab.PlayFabMultiplayerAPI.ShutdownMultiplayerServerAsync(request); var resp = await task; bool hasError = CheckForError(resp); if (!hasError) { return(true); } else { throw new Exception(String.Format("Deallocate failed with error: {0}", resp.Error.ErrorMessage)); } } return(false); }
public static async Task <AzureRateCardHttpResponse> GetRates(string subscriptionId, string offerId, AzureRegion region, string locale) { // get access token var accessToken = await AadAuthHelper.GetAadAuthToken(SettingsHelper.AzureManagementApiResourceId); // setup authenticated http client var httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.Add("Accept", "application/json"); httpClient.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken); // create request var azQueryPath = string.Format("subscriptions/{0}/providers/Microsoft.Commerce/RateCard?api-version=2015-06-01-preview&$filter=OfferDurableId eq '{1}' and Currency eq '{2}' and Locale eq '{3}' and RegionInfo eq '{4}'", HttpUtility.UrlEncode(subscriptionId), HttpUtility.UrlEncode(offerId), HttpUtility.UrlEncode(region.CurrencyCode), HttpUtility.UrlEncode(locale), HttpUtility.UrlEncode(region.Id)); var query = string.Format(SettingsHelper.AzureManagementApiEndpoint, azQueryPath); var request = new HttpRequestMessage(HttpMethod.Get, query); // issue request and convert response to typed object var response = await httpClient.SendAsync(request); var rawResponseString = await response.Content.ReadAsStringAsync(); var azarmResponse = JsonConvert.DeserializeObject <AzureRateCardHttpResponse>(rawResponseString); return(azarmResponse); }
public Lobby CreateLobby(int version, AzureRegion region) { string sessionID = Guid.NewGuid().ToString(); Lobby newLobby = InternalCreateLobbyFromSessionID(sessionID, version, region); return(newLobby); }
private Lobby InternalCreateLobbyFromSessionID(string sessionID, int version, AzureRegion region) { if (!Lobbies.ContainsKey(sessionID)) { Lobbies[sessionID] = new Lobby(sessionID, version, region); } return(Lobbies[sessionID]); }
public void SaveRegion(BuildBundleID identity) { AzureRegion newRegion = GetEnumValue <AzureRegion>(identity.region.options[identity.region.value].text); try { editRegionID.UpdateRegion(newRegion, int.Parse(maxServersField.text), int.Parse(standByServersField.text)); editRegionWindow.SetActive(false); } catch (System.Exception e) { Inform("Error: " + e.Message); } }
/// <summary> /// Creates an account on a VM for RDP use /// </summary> /// <returns> /// RDP connection information including ip, port and credentials /// </returns> public async Task <RDPInformation> CreateRDPCredentials(string buildID, AzureRegion region, string VMID) { // Create a random username, usernames must be unique Random rng = new Random(Environment.TickCount); string strUsername = "******" + rng.Next().ToString(); DateTime expirationTime = DateTime.UtcNow.AddMinutes(60); CreateRemoteUserRequest request = new CreateRemoteUserRequest() { BuildId = buildID, Region = region, ExpirationTime = expirationTime, VmId = VMID, Username = strUsername, }; // Create the user on the VM and retrieve the password generated by the backend service var resp = await PlayFab.PlayFabMultiplayerAPI.CreateRemoteUserAsync(request); string strPassword = resp.Result.Password; if (!CheckForError(resp)) { GetRemoteLoginEndpointRequest endpointRequest = new GetRemoteLoginEndpointRequest() { BuildId = buildID, Region = region, VmId = VMID, }; // Retrieve the RDP connection details for the VM var endpointResp = await PlayFab.PlayFabMultiplayerAPI.GetRemoteLoginEndpointAsync(endpointRequest); RDPInformation rdpInfo = new RDPInformation { Username = strUsername, Password = strPassword, Address = endpointResp.Result.IPV4Address, Port = endpointResp.Result.Port, }; return(rdpInfo); } return(null); }
/// <summary> /// Retrieves a list of virtual machines /// </summary> /// <returns> /// A list container of running VMs /// </returns> public async Task <List <VirtualMachineSummary> > QueryVMs(string buildID, AzureRegion region) { // We must be authenticated to make this call if (IsAuthenticated()) { ListVirtualMachineSummariesRequest request = new ListVirtualMachineSummariesRequest(); request.BuildId = buildID; request.Region = region; var task = PlayFab.PlayFabMultiplayerAPI.ListVirtualMachineSummariesAsync(request); var resp = await task; return(resp.Result.VirtualMachines); } return(null); }
public void UpdateRegion(AzureRegion newRegion, int newMax, int newStandby) { region = newRegion; maxServers = newMax; standByServers = newStandby; if (regionIDParams == null) { regionIDParams = new BuildRegionParams(); } regionIDParams.Region = newRegion; regionIDParams.MaxServers = newMax; regionIDParams.StandbyServers = newStandby; buttonText.text = $"<b>{newRegion}</b>\nMX:<b>{newMax}</b> - SB:<b>{newStandby}</b>"; }
private List <MultiplayerServerSummary> GetMultiplayerServers(string buildId, AzureRegion region) { List <MultiplayerServerSummary> summaries = new List <MultiplayerServerSummary>(); ListMultiplayerServersResponse response = CallPlayFabApi(() => Instance .ListMultiplayerServersAsync(new ListMultiplayerServersRequest() { PageSize = DefaultPageSize, Region = region.ToString(), BuildId = buildId })); summaries.AddRange(response.MultiplayerServerSummaries ?? Enumerable.Empty <MultiplayerServerSummary>()); if (All) { while (!string.IsNullOrEmpty(response.SkipToken)) { response = CallPlayFabApi(() => Instance .ListMultiplayerServersAsync(new ListMultiplayerServersRequest() { BuildId = buildId, PageSize = DefaultPageSize, SkipToken = response.SkipToken, Region = region.ToString() })); summaries.AddRange(response.MultiplayerServerSummaries ?? Enumerable.Empty <MultiplayerServerSummary>()); } } return(summaries); }
public Lobby(string sessionID, int version, AzureRegion region) { SessionID = sessionID; VersionNum = version; Region = region; }
public RegionPinger(string hostNameOrAddress, AzureRegion region) { _hostNameOrAddress = hostNameOrAddress; _region = region; }
public void StartMatchmaking(AzureRegion region) { PlayerState = EPlayerState.Matchmaking; MatchmakingRegion = region; }
public Lobby RequestLobby(string sessionID, int version, AzureRegion region) { return(InternalCreateLobbyFromSessionID(sessionID, version, region)); }
private async void btnDeploy_Click(object sender, EventArgs e) { Dictionary <string, string> dictAssetNames = new Dictionary <string, string>(); try { foreach (DataGridViewRow row in gridviewAssets.Rows) { if (!row.IsNewRow) { string strPath = row.Cells[0].Value.ToString(); string strAssetName = await PlayFabMultiplayerServerHelper.Singleton.UploadAsset(strPath, new Dictionary <string, string>()); if (strAssetName != null) { dictAssetNames.Add(strPath, strAssetName); } else { MessageBox.Show("Failed to upload asset"); } } } } catch (Exception ex) { MessageBox.Show(ex.Message, "Error Occured", MessageBoxButtons.OK); } if (dictAssetNames.Count > 0) { List <AssetReferenceParams> lstGameAssets = new List <AssetReferenceParams>(); foreach (var keyValuePair in dictAssetNames) { // Get mount path from grid view DataGridViewRow row = gridviewAssets.Rows.Cast <DataGridViewRow>().Where(r => r.Cells[0].Value.ToString().Equals(keyValuePair.Key)).First(); if (row != null) { var assetRefParams = new AssetReferenceParams() { FileName = keyValuePair.Value, MountPath = row.Cells[1].Value.ToString() }; lstGameAssets.Add(assetRefParams); } } List <Port> lstPorts = new List <Port>(); foreach (DataGridViewRow row in gridviewPorts.Rows) { if (!row.IsNewRow) { string strPortName = row.Cells[0].Value.ToString(); int portNumber = -1; if (int.TryParse(row.Cells[1].Value.ToString(), out portNumber)) { ProtocolType protoType = (ProtocolType)Enum.Parse(typeof(ProtocolType), row.Cells[2].Value.ToString()); lstPorts.Add(new Port { Name = strPortName, Num = portNumber, Protocol = protoType }); } else { MessageBox.Show("Invalid port number."); } } } List <BuildRegionParams> lstRegions = new List <BuildRegionParams>(); foreach (DataGridViewRow row in gridviewRegionConfig.Rows) { if (!row.IsNewRow) { AzureRegion region = (AzureRegion)Enum.Parse(typeof(AzureRegion), row.Cells[0].Value.ToString()); int numSessions; int numStandingBy; if (int.TryParse(row.Cells[1].Value.ToString(), out numSessions)) { if (int.TryParse(row.Cells[2].Value.ToString(), out numStandingBy)) { lstRegions.Add(new BuildRegionParams { MaxServers = numSessions, Region = region, StandbyServers = numStandingBy }); } else { MessageBox.Show("Invalid StandingBy number"); } } else { MessageBox.Show("Invalid NumSessions number"); } } } ; Dictionary <string, string> dictMetaData = new Dictionary <string, string>(); foreach (DataGridViewRow row in gridviewMetadata.Rows) { if (!row.IsNewRow) { dictMetaData.Add(row.Cells[0].ToString(), row.Cells[1].ToString()); } } List <GameCertificateReferenceParams> lstCerts = new List <GameCertificateReferenceParams>(); foreach (DataGridViewRow row in gridviewCertificates.Rows) { if (!row.IsNewRow) { string certName = row.Cells[0].ToString(); lstCerts.Add(new GameCertificateReferenceParams() { GsdkAlias = certName, Name = certName }); } } try { var res = await PlayFabMultiplayerServerHelper.Singleton.CreateBuild(txtBuildName.Text, (ContainerFlavor)cmbContainerFlavor.SelectedIndex, lstGameAssets, lstCerts, lstPorts, dictMetaData, lstRegions, Convert.ToInt32(numTenants.Value), txtStartupCMD.Text, (AzureVmSize)cmbAzureVMs.SelectedIndex); MessageBox.Show(res ? "Build created" : "Build creation failed", "Create Build"); } catch (Exception ex) { MessageBox.Show(ex.Message, "Error Occured", MessageBoxButtons.OK); } } this.Enabled = true; this.Close(); }
private static bool BeAzureRegion(string region) => !string.IsNullOrEmpty(region) && AzureRegion.IsValid(region);