コード例 #1
0
    /// <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);
    }
コード例 #2
0
        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);
        }
コード例 #3
0
    public Lobby CreateLobby(int version, AzureRegion region)
    {
        string sessionID = Guid.NewGuid().ToString();
        Lobby  newLobby  = InternalCreateLobbyFromSessionID(sessionID, version, region);

        return(newLobby);
    }
コード例 #4
0
    private Lobby InternalCreateLobbyFromSessionID(string sessionID, int version, AzureRegion region)
    {
        if (!Lobbies.ContainsKey(sessionID))
        {
            Lobbies[sessionID] = new Lobby(sessionID, version, region);
        }

        return(Lobbies[sessionID]);
    }
コード例 #5
0
ファイル: PlayerController.cs プロジェクト: TCROC/PFAdmin
    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);
        }
    }
コード例 #6
0
    /// <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);
    }
コード例 #7
0
    /// <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);
    }
コード例 #8
0
ファイル: RegionID.cs プロジェクト: v-jitaly/PFAdmin
    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>";
    }
コード例 #9
0
        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);
        }
コード例 #10
0
ファイル: Lobby.cs プロジェクト: Fritzbraun/PlayFab-Samples-1
 public Lobby(string sessionID, int version, AzureRegion region)
 {
     SessionID  = sessionID;
     VersionNum = version;
     Region     = region;
 }
コード例 #11
0
 public RegionPinger(string hostNameOrAddress, AzureRegion region)
 {
     _hostNameOrAddress = hostNameOrAddress;
     _region            = region;
 }
コード例 #12
0
 public void StartMatchmaking(AzureRegion region)
 {
     PlayerState       = EPlayerState.Matchmaking;
     MatchmakingRegion = region;
 }
コード例 #13
0
 public Lobby RequestLobby(string sessionID, int version, AzureRegion region)
 {
     return(InternalCreateLobbyFromSessionID(sessionID, version, region));
 }
コード例 #14
0
        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();
        }
コード例 #15
0
 private static bool BeAzureRegion(string region)
 => !string.IsNullOrEmpty(region) &&
 AzureRegion.IsValid(region);