- 프로젝트명 : 핵 앤 슬래시 키우기: 방치형 RPG
현재 비동기, 동기 모두 Backend.PlayerData.UpdateMyData를 사용중에 있습니다.
예전에 처리량 확인을 위해 사용중이였는데요.
확실하진 않지만, bro.IsSuccess() 임에도 저장이 안되는 경우를 겪은것 같습니다.
사실 더이상 처리량 확인은 필요하지 않다고 생각하고 있구요.
이 함수보다 더 좋은 성공확률 + 라이브중에 대체해도 상관없는 함수가 있다면 소개시켜주세요ㅠ
아래는 현재 제 코드입니다. 참고 부탁드립니다.
비동기 저장 - 일반적인 주기에 따른 저장(마을에 왔을때), 강화 등의 이벤트때 실행
public void Save(string caller)
{
Debug.LogError($"Saved by {caller}");
Binder.DataManager.Save.LastSavedDateTime =
Binder.TimeManager.Get_CurrentDateTime().ToString(CultureInfo.InvariantCulture);
OnlyChangedSaveDataToParam();
if (saveParam.Count < 1)
return;
SendQueue.Enqueue(Backend.PlayerData.UpdateMyData, "UserData",
BackendHiddenResource.GameDataRowInDate.GetDecrypted(), saveParam, callback =>
{
if (callback.IsSuccess())
{
Binder.UIManager.NetworkErrorPopupPanel.OnSaveSuccess();
//Debug.LogError($"{caller}({++saveCount})/{callback.GetWriteCapacity()}");
}
else
OnFailedToSave(callback.GetMessage());
});
}
동기 저장 - 게임 앱 종료시, 네트워크 연결이 끊겼다가 Retry로 다시 연결됨을 확인했을때 실행
public void Save_Sync(bool isFromGameQuitPanel = false)
{
if (!loginSuccess || string.IsNullOrEmpty(BackendHiddenResource.GameDataRowInDate))
return;
SaveResult res = SaveResult.NothingToSave;
Binder.DataManager.Save.LastSavedDateTime =
Binder.TimeManager.Get_CurrentDateTime().ToString(CultureInfo.InvariantCulture);
OnlyChangedSaveDataToParam();
if (saveParam.Count > 1)
{
BackendReturnObject bro = Backend.PlayerData.UpdateMyData("UserData",
BackendHiddenResource.GameDataRowInDate.GetDecrypted(), saveParam);
if (bro.IsSuccess())
{
res = SaveResult.Success;
if (Binder.UIManager.NetworkErrorPopupPanel.IsOpen &&
Binder.UIManager.NetworkErrorPopupPanel.ErrorType == NetworkErrorType.SaveFailed_API)
Binder.UIManager.NetworkErrorPopupPanel.Close();
}
else
{
res = SaveResult.Failed;
}
Debug.LogError(res);
}
if (isFromGameQuitPanel)
Binder.UIManager.GameQuitPanel.OnSaveComplete(res);
}