コード例 #1
0
        /// <summary>
        /// Cloud Script is one of PlayFab's most versatile features. It allows client code to request execution of any kind of
        /// custom server-side functionality you can implement, and it can be used in conjunction with virtually anything.
        /// </summary>
        public static async Task <PlayFabResult <ExecuteFunctionResult> > ExecuteFunctionAsync(ExecuteFunctionRequest request, object customData = null, Dictionary <string, string> extraHeaders = null)
        {
            await new PlayFabUtil.SynchronizationContextRemover();

            var requestContext  = request?.AuthenticationContext ?? PlayFabSettings.staticPlayer;
            var requestSettings = PlayFabSettings.staticSettings;

            if (requestContext.EntityToken == null)
            {
                throw new PlayFabException(PlayFabExceptionCode.EntityTokenNotSet, "Must call Client Login or GetEntityToken before calling this method");
            }


            string localApiServerString = PlayFabSettings.LocalApiServer;

            if (!string.IsNullOrEmpty(localApiServerString))
            {
                var baseUri = new System.Uri(localApiServerString);
                var fullUri = new System.Uri(baseUri, "/CloudScript/ExecuteFunction".TrimStart('/'));

                // Duplicate code necessary to avoid changing all SDK methods to new convention
                var debugHttpResult = await PlayFabHttp.DoPostWithFullUri(fullUri.AbsoluteUri, request, "X-EntityToken", requestContext.EntityToken, extraHeaders);

                if (debugHttpResult is PlayFabError debugError)
                {
                    PlayFabSettings.GlobalErrorHandler?.Invoke(debugError);
                    return(new PlayFabResult <ExecuteFunctionResult> {
                        Error = debugError, CustomData = customData
                    });
                }

                var debugResultRawJson = (string)debugHttpResult;
                var debugResultData    = PluginManager.GetPlugin <ISerializerPlugin>(PluginContract.PlayFab_Serializer).DeserializeObject <PlayFabJsonSuccess <ExecuteFunctionResult> >(debugResultRawJson);
                var debugResult        = debugResultData.data;
                return(new PlayFabResult <ExecuteFunctionResult> {
                    Result = debugResult, CustomData = customData
                });
            }

            var httpResult = await PlayFabHttp.DoPost("/CloudScript/ExecuteFunction", request, "X-EntityToken", requestContext.EntityToken, extraHeaders);

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

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

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