Exemplo n.º 1
0
        /// <summary>
        /// Gets the URL to upload assets to.
        /// </summary>
        public static void GetAssetUploadUrl(GetAssetUploadUrlRequest request, Action <GetAssetUploadUrlResponse> resultCallback, Action <PlayFabError> errorCallback, object customData = null, Dictionary <string, string> extraHeaders = null)
        {
            var context = (request == null ? null : request.AuthenticationContext) ?? PlayFabSettings.staticPlayer;


            PlayFabHttp.MakeApiCall("/MultiplayerServer/GetAssetUploadUrl", request, AuthType.EntityToken, resultCallback, errorCallback, customData, extraHeaders, context);
        }
        /// <summary>
        /// Gets the URL to upload assets to.
        /// </summary>
        public void GetAssetUploadUrl(GetAssetUploadUrlRequest request, Action <GetAssetUploadUrlResponse> resultCallback, Action <PlayFabError> errorCallback, object customData = null, Dictionary <string, string> extraHeaders = null)
        {
            var context      = (request == null ? null : request.AuthenticationContext) ?? authenticationContext;
            var callSettings = apiSettings ?? PlayFabSettings.staticSettings;

            if (!context.IsEntityLoggedIn())
            {
                throw new PlayFabException(PlayFabExceptionCode.NotLoggedIn, "Must be logged in to call this method");
            }
            PlayFabHttp.MakeApiCall("/MultiplayerServer/GetAssetUploadUrl", request, AuthType.EntityToken, resultCallback, errorCallback, customData, extraHeaders, context, callSettings, this);
        }
Exemplo n.º 3
0
    /// <summary>
    /// Uploads an asset (e.g. a server build, or art assets/other files to be deployed onto the docker container
    /// </summary>
    /// <returns>
    /// String representing the deployed file name
    /// </returns>
    public async Task <string> UploadAsset(string assetLocalPath, Dictionary <string, string> metaData)
    {
        metaData.Add("OriginalFilePath", assetLocalPath);


        // NOTE: We append a timestamp here to provide uniqueness. Duplicate asset keys are not allowed.
        Int32  unixTimestamp   = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
        string assetRemoteName = String.Format("0_{0}_{1}", unixTimestamp, System.IO.Path.GetFileName(assetLocalPath));

        GetAssetUploadUrlRequest assetURLRequest = new GetAssetUploadUrlRequest
        {
            FileName = assetRemoteName,
        };

        var assetURLResponse = await PlayFab.PlayFabMultiplayerAPI.GetAssetUploadUrlAsync(assetURLRequest);

        bool hasError = CheckForError(assetURLResponse);

        if (!hasError)
        {
            // parse SAS token
            string sasToken = assetURLResponse.Result.AssetUploadUrl;
            sasToken = sasToken.Remove(sasToken.LastIndexOf("&api"));
            string storageAccountName = sasToken.Substring(8, sasToken.IndexOf("blob") - 9);
            sasToken = sasToken.Substring(sasToken.IndexOf("sv"));

            // Azure storage auth using SAS token
            StorageCredentials accountSAS = new StorageCredentials(sasToken);

            // Use these credentials and the account name to create a Blob service client.
            CloudStorageAccount accountWithSAS = new CloudStorageAccount(accountSAS, storageAccountName, endpointSuffix: null, useHttps: true);

            // create and upload blob
            CloudBlobClient    blobClient = accountWithSAS.CreateCloudBlobClient();
            CloudBlobContainer container  = blobClient.GetContainerReference("gameassets");
            var blob = container.GetBlockBlobReference(assetRemoteName);
            blob.Properties.ContentType = "application/zip";
            await blob.UploadFromFileAsync(assetLocalPath);

            return(assetURLResponse.Result.FileName);
        }
        else
        {
            throw new Exception(String.Format("Upload Asset failed with error: {0}", assetURLResponse.Error.ErrorMessage));
        }
    }
Exemplo n.º 4
0
 /// <summary>
 /// Gets the URL to upload assets to.
 /// </summary>
 public static void GetAssetUploadUrl(GetAssetUploadUrlRequest request, Action <GetAssetUploadUrlResponse> resultCallback, Action <PlayFabError> errorCallback, object customData = null, Dictionary <string, string> extraHeaders = null)
 {
     PlayFabHttp.MakeApiCall("/MultiplayerServer/GetAssetUploadUrl", request, AuthType.EntityToken, resultCallback, errorCallback, customData, extraHeaders);
 }
Exemplo n.º 5
0
        /// <summary>
        /// Gets the URL to upload assets to.
        /// </summary>
        public static async Task <PlayFabResult <GetAssetUploadUrlResponse> > GetAssetUploadUrlAsync(GetAssetUploadUrlRequest request, object customData = null, Dictionary <string, string> extraHeaders = null)
        {
            if (PlayFabSettings.EntityToken == null)
            {
                throw new PlayFabException(PlayFabExceptionCode.EntityTokenNotSet, "Must call GetEntityToken before calling this method");
            }

            var httpResult = await PlayFabHttp.DoPost("/MultiplayerServer/GetAssetUploadUrl", request, "X-EntityToken", PlayFabSettings.EntityToken, extraHeaders);

            if (httpResult is PlayFabError)
            {
                var error = (PlayFabError)httpResult;
                PlayFabSettings.GlobalErrorHandler?.Invoke(error);
                return(new PlayFabResult <GetAssetUploadUrlResponse> {
                    Error = error, CustomData = customData
                });
            }

            var resultRawJson = (string)httpResult;
            var resultData    = PluginManager.GetPlugin <ISerializerPlugin>(PluginContract.PlayFab_Serializer).DeserializeObject <PlayFabJsonSuccess <GetAssetUploadUrlResponse> >(resultRawJson);
            var result        = resultData.data;

            return(new PlayFabResult <GetAssetUploadUrlResponse> {
                Result = result, CustomData = customData
            });
        }