public static TResultType HandleResults(CallRequestContainer callRequest, Delegate resultCallback, ErrorCallback errorCallback, Action <TResultType, CallRequestContainer> resultAction) { if (callRequest.Error == null) // Some other error earlier in the process, just report it below { try { ResultContainer <TResultType> resultEnvelope = new ResultContainer <TResultType>(); JsonConvert.PopulateObject(callRequest.ResultStr, resultEnvelope, Util.JsonSettings); if (!resultEnvelope.errorCode.HasValue || resultEnvelope.errorCode.Value == (int)PlayFabErrorCode.Success) { resultEnvelope.data.Request = callRequest.Request; resultEnvelope.data.CustomData = callRequest.CustomData; if (resultAction != null) { resultAction(resultEnvelope.data, callRequest); } if (resultCallback != null) { _invokeParams[0] = resultEnvelope.data; resultCallback.DynamicInvoke(_invokeParams); } PlayFabSettings.InvokeResponse(callRequest.Url, callRequest.CallId, callRequest.Request, resultEnvelope.data, callRequest.Error, callRequest.CustomData); // Do the globalMessage callback return(resultEnvelope.data); // This is the expected output path for successful api call } // Successful HTTP interaction, but PlayFab server returned an error callRequest.Error = new PlayFabError { HttpCode = resultEnvelope.code, HttpStatus = resultEnvelope.status, Error = (PlayFabErrorCode)resultEnvelope.errorCode.Value, ErrorMessage = resultEnvelope.errorMessage, ErrorDetails = resultEnvelope.errorDetails }; } catch (Exception e) { // Failed to decode the result callRequest.Error = new PlayFabError { HttpCode = (int)HttpStatusCode.OK, // Technically the server returned a result, the sdk just didn't parse it correctly HttpStatus = "Client failed to parse response from server", Error = PlayFabErrorCode.Unknown, ErrorMessage = e.ToString(), ErrorDetails = null }; } } if (errorCallback != null) { errorCallback(callRequest.Error); } if (PlayFabSettings.GlobalErrorHandler != null) { PlayFabSettings.GlobalErrorHandler(callRequest.Error); } return(null); }