public void GetCloudLastSavedMetadataAsync(Action<CloudMetadata> onPeekResult) { PlatformSaveUtil.ShowPeekProgressPopup(); if (File.Exists(RemoteSaveFileForEditor)) { var remoteSaveDict = PlatformSaveUtil.DeserializeSaveData(File.ReadAllBytes(RemoteSaveFileForEditor)); var cloudMetadata = new CloudMetadata { level = PlatformSaveUtil.GetInt32FromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_LEVEL_KEY), levelExp = PlatformSaveUtil.GetInt32FromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_LEVEL_EXP_KEY), gem = PlatformSaveUtil.GetBigIntegerFromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_GEM_KEY), riceRate = PlatformSaveUtil.GetBigIntegerFromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_RICE_RATE_KEY), saveDate = PlatformSaveUtil.GetInt64FromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.SAVE_DATE_KEY) }; onPeekResult(cloudMetadata); } else { onPeekResult(CloudMetadata.Invalid); } }
void ShowSaveResultPopup(byte[] savedData, RemoteSaveDictionary remoteSaveDict, string path) { ProgressMessage.instance.Close(); var text = string.Format( "세이브 완료 - age: {0} sec, size: {1} bytes, accountLevel = {2}, accountLevelExp = {3}, accountGem = {4}, savedDate = {5}, path = {6}", TimeChecker.instance.GetLastSavedTimeTotalSeconds(), savedData.Length, PlatformSaveUtil.GetInt32FromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_LEVEL_KEY), PlatformSaveUtil.GetInt32FromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_LEVEL_EXP_KEY), PlatformSaveUtil.GetBigIntegerFromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_GEM_KEY), PlatformSaveUtil.GetInt64FromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.SAVE_DATE_KEY), path ); ConfirmPopup.instance.Open(text); }
public void GetCloudLastSavedMetadataAsync(Action <CloudMetadata> onPeekResult) { if (!Social.localUser.authenticated) { SushiDebug.LogFormat("GetCloudSavedAccountData: not authenticated"); onPeekResult(CloudMetadata.Invalid); return; } #if !NO_GPGS var savedGameClient = PlayGamesPlatform.Instance.SavedGame; if (savedGameClient != null) { Open(savedGameClient, true, OnSavedGameOpenedAndReadConflictResolve, (status, game) => { if (status == SavedGameRequestStatus.Success) { // handle reading or writing of saved game. SushiDebug.LogFormat("GetCloudSavedAccountData: Save game open (read) success! Filename: {0}", game.Filename); savedGameClient.ReadBinaryData(game, (status2, data2) => { if (status == SavedGameRequestStatus.Success) { // handle processing the byte array data SushiDebug.LogFormat("GetCloudSavedAccountData success! - Data size: {0} bytes", data2.Length); try { var remoteSaveDict = PlatformSaveUtil.DeserializeSaveData(data2); var cloudMetadata = new CloudMetadata { level = PlatformSaveUtil.GetInt32FromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_LEVEL_KEY), levelExp = PlatformSaveUtil.GetInt32FromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_LEVEL_EXP_KEY), gem = PlatformSaveUtil.GetBigIntegerFromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_GEM_KEY), riceRate = PlatformSaveUtil.GetBigIntegerFromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_RICE_RATE_KEY), saveDate = PlatformSaveUtil.GetInt64FromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.SAVE_DATE_KEY) }; onPeekResult(cloudMetadata); } catch { SushiDebug.LogFormat("GetCloudSavedAccountData: Exception at deserialization"); onPeekResult(CloudMetadata.Invalid); } } else { SushiDebug.LogFormat("GetCloudSavedAccountData: ReadBinaryData error! - {0}", status2); onPeekResult(CloudMetadata.Invalid); } }); } else { PlatformSaveUtil.LogCloudLoadSaveError(string.Format( "GetCloudSavedAccountData: OpenWithAutomaticConflictResolution error! - {0}", status)); onPeekResult(CloudMetadata.Invalid); } }); } else { PlatformSaveUtil.LogCloudLoadSaveError("GetCloudSavedAccountData: savedGameClient null"); onPeekResult(CloudMetadata.Invalid); } #endif }
public void OnCloudLoadResult(string result, byte[] data) { if (result == "OK") { SushiDebug.LogFormat("OnCloudLoadResult: data length {0} bytes", data != null ? data.Length : 0); // 메타데이터 조회의 경우와 실제 세이브 데이터 로딩의 경우를 나눠서 처리 if (onPeekResultSave != null) { SushiDebug.Log("OnCloudLoadResult: onPeekResultSave valid"); var cloudMetadata = CloudMetadata.Invalid; if (data == null || data.Length == 0) { } else { try { var remoteSaveDict = PlatformSaveUtil.DeserializeSaveData(data); cloudMetadata = new CloudMetadata { level = PlatformSaveUtil.GetInt32FromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_LEVEL_KEY), levelExp = PlatformSaveUtil.GetInt32FromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_LEVEL_EXP_KEY), gem = PlatformSaveUtil.GetBigIntegerFromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_GEM_KEY), riceRate = PlatformSaveUtil.GetBigIntegerFromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.ACCOUNT_RICE_RATE_KEY), saveDate = PlatformSaveUtil.GetInt64FromRemoteSaveDict(remoteSaveDict, PlatformSaveUtil.SAVE_DATE_KEY) }; } catch { cloudMetadata = CloudMetadata.Invalid; } } onPeekResultSave(cloudMetadata); onPeekResultSave = null; } else { SushiDebug.Log("OnCloudLoadResult: onPeekResultSave empty. data load..."); if (data == null || data.Length == 0) { PlatformSaveUtil.ShowLoadErrorPopup("OnCloudLoadResult: Cloud save data corrupted"); } else { SushiDebug.LogFormat("OnCloudLoadResult: success! - Data size: {0} bytes", data.Length); var remoteSaveDict = PlatformSaveUtil.DeserializeSaveData(data); PlatformSaveUtil.LoadDataAndLoadSplashScene(remoteSaveDict); } } } else { PlatformSaveUtil.ShowSaveErrorPopup(TextHelper.GetText("platform_cloud_load_fail") + "\n\n" + result); } }