Skip to content

Commit b18f7fa

Browse files
committed
Merge branch 'feat-remap-playfabcloudscript-logs-error-code'
2 parents 8336a96 + a5f6f8a commit b18f7fa

File tree

2 files changed

+83
-8
lines changed

2 files changed

+83
-8
lines changed

Runtime/Models/PlayFabCloudScriptResponse.cs

Lines changed: 68 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
using System;
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
24
using PlayFab;
35
using PlayFab.ClientModels;
46
using UnityEngine;
@@ -31,12 +33,15 @@ public PlayFabCloudScriptResponseLogsErrorCode LogsErrorCode
3133
return PlayFabCloudScriptResponseLogsErrorCode.NoError;
3234
}
3335

34-
if (Result.Logs.Count <= 0)
36+
var resultErrorLogs = Result.Logs.Where(x => x.Level == "Error").ToList();
37+
if (resultErrorLogs.Count <= 0)
3538
{
3639
return PlayFabCloudScriptResponseLogsErrorCode.Unknown;
3740
}
38-
39-
if (Result.Logs[0].Data == null)
41+
42+
// we look at the last error in logs as that's where error codes thrown via cloud script should be located.
43+
var lastResultErrorLog = resultErrorLogs.Last();
44+
if (lastResultErrorLog.Data == null)
4045
{
4146
return PlayFabCloudScriptResponseLogsErrorCode.Unknown;
4247
}
@@ -48,8 +53,10 @@ public PlayFabCloudScriptResponseLogsErrorCode LogsErrorCode
4853
//explicitly instantiate to fix bug where unity strips out LogsErrorData because it thinks it's not used
4954
//see https://community.playfab.com/comments/60164/view.html
5055
var logsErrorData = new LogsErrorData();
51-
logsErrorData = serializer.DeserializeObject<LogsErrorData>(Result.Logs[0].Data.ToString());
52-
return logsErrorData.ErrorCode;
56+
logsErrorData = serializer.DeserializeObject<LogsErrorData>(lastResultErrorLog.Data.ToString());
57+
58+
//if our ErrorCode is == 0 this is likely an error code from PlayFab so just say Unknown
59+
return logsErrorData.ErrorCode == 0 ? PlayFabCloudScriptResponseLogsErrorCode.Unknown : logsErrorData.ErrorCode;
5360
}
5461
catch (Exception)
5562
{
@@ -59,6 +66,51 @@ public PlayFabCloudScriptResponseLogsErrorCode LogsErrorCode
5966
return PlayFabCloudScriptResponseLogsErrorCode.Unknown;
6067
}
6168
}
69+
70+
/// <summary>
71+
/// Converts a <see cref="PlayFabError"/> to a <see cref="PlayFabCloudScriptResponse"/> with <see cref="LogsErrorData"/>
72+
/// <remarks>This can be useful when relying on <see cref="LogsErrorCode"/> to check cloud scripts errors</remarks>
73+
/// </summary>
74+
/// <param name="playFabError">The PlayFabError to convert</param>
75+
/// <typeparam name="T">The type of reponse we will return, doesn't do much but can be nice for easily returning same return type</typeparam>
76+
/// <returns>A "success" cloud script response marked with a "ContainsError" from <see cref="LogsErrorCode"/></returns>
77+
public static PlayFabCloudScriptResponse<T> ConvertToLogsError<T>(PlayFabError playFabError)
78+
{
79+
//prefer this so we are using all PlayFab json deserialization
80+
var serializer = PluginManager.GetPlugin<ISerializerPlugin>(PluginContract.PlayFab_Serializer);
81+
var errorCode = PlayFabCloudScriptResponseLogsErrorCode.Unknown;
82+
try
83+
{
84+
errorCode = (PlayFabCloudScriptResponseLogsErrorCode)(int)playFabError.Error;
85+
}
86+
catch (Exception e)
87+
{
88+
Debug.LogError(
89+
"ConvertToLogsError tried to convert PlayFabErrorCode to PlayFabCloudScriptResponseLogsErrorCode and failed. Unknown error will be used.");
90+
}
91+
var logsErrorData = new LogsErrorData
92+
{
93+
ErrorCode = errorCode,
94+
ErrorMessage = playFabError.ErrorMessage
95+
};
96+
return new PlayFabCloudScriptResponse<T>(new ExecuteCloudScriptResult
97+
{
98+
Error = new ScriptExecutionError
99+
{
100+
Error = "ConvertToLogsError",
101+
Message = $"This error was generated by PlayFabCloudScriptResponse.ConvertToLogsError."
102+
},
103+
Logs = new List<LogStatement>
104+
{
105+
new LogStatement
106+
{
107+
Data = serializer.SerializeObject(logsErrorData),
108+
Level = "Error",
109+
Message = playFabError.ErrorMessage
110+
}
111+
}
112+
}, null);
113+
}
62114
}
63115

64116
public class PlayFabCloudScriptResponse<T> : PlayFabCloudScriptResponse
@@ -85,6 +137,10 @@ public T FunctionResult
85137

86138
/// <summary>
87139
/// Allows us to map a cloud script error code using log.error(message,object errorCodeDataObject)
140+
/// <remarks>
141+
/// PlayFab ErrorCodes = 1 - 19999 (Should directly map to <see cref="PlayFabErrorCode"/>.<br/>
142+
/// Custom error codes = -1 and 20000+.
143+
/// </remarks>
88144
/// <code>
89145
/// function throwError(message){
90146
/// let errorDataObject = {};
@@ -101,8 +157,11 @@ public enum PlayFabCloudScriptResponseLogsErrorCode
101157
NoError = -1,
102158
Unknown = 1,
103159
InvalidParams = 1000,
104-
PlayerStatsNotFoundForLeaderboard = 1001,
105-
LeaderboardEmpty = 1002
160+
AccountNotFound = 1001,
161+
UsersAlreadyFriends = 1183,
162+
//--- Our error codes below ---
163+
PlayerStatsNotFoundForLeaderboard = 20001,
164+
LeaderboardEmpty = 20002
106165
}
107166

108167
/// <summary>
@@ -111,5 +170,6 @@ public enum PlayFabCloudScriptResponseLogsErrorCode
111170
public class LogsErrorData
112171
{
113172
public PlayFabCloudScriptResponseLogsErrorCode ErrorCode;
173+
public string ErrorMessage;
114174
}
115175
}

Runtime/PlayFabClientAPIWrapper.cs

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -328,6 +328,21 @@ public static Task<PlayFabCommonResponse<ValidateIOSReceiptResult>> ValidateIOSR
328328
return taskCompletionSource.Task;
329329
}
330330

331+
/// <inheritdoc cref="PlayFabClientAPI.GetAccountInfo"/>
332+
public static Task<PlayFabCommonResponse<GetAccountInfoResult>> GetAccountInfoAsync(
333+
GetAccountInfoRequest request)
334+
{
335+
var taskCompletionSource = new TaskCompletionSource<PlayFabCommonResponse<GetAccountInfoResult>>();
336+
PlayFabClientAPI.GetAccountInfo(request, (result) =>
337+
{
338+
taskCompletionSource.SetResult(new PlayFabCommonResponse<GetAccountInfoResult>(result,null));
339+
}, (error) =>
340+
{
341+
taskCompletionSource.SetResult(new PlayFabCommonResponse<GetAccountInfoResult>(null, error));
342+
});
343+
return taskCompletionSource.Task;
344+
}
345+
331346
/// <inheritdoc cref="PlayFabClientAPI.GetTime"/>
332347
public static Task<PlayFabCommonResponse<GetTimeResult>> GetTimeAsync(
333348
GetTimeRequest request)

0 commit comments

Comments
 (0)