コード例 #1
0
    void Awake()
    {
        confirmPopup         = FindObjectOfType <ConfirmPopup>();
        configPopup          = FindObjectOfType <ConfigPopup>();
        progressMessage      = FindObjectOfType <ProgressMessage>();
        purchasingInProgress = FindObjectOfType <PurchasingInProgress>();

        ConfirmPopup.instance         = confirmPopup;
        ConfigPopup.instance          = configPopup;
        ProgressMessage.instance      = progressMessage;
        FontManager.instance          = fontManager;
        PlatformIapManager.instance   = platformIapManager;
        PlatformAdMobAdsInit.instance = platformAdMobAdsInit;
        PurchasingInProgress.instance = purchasingInProgress;
        Data.instance = data;
    }
コード例 #2
0
    public static bool Save(BalloonSpawner spawner, ConfigPopup configPopup, BalloonSound sound, Data data,
                            SaveReason sr)
    {
        // 에디터에서 간혹 게임 플레이 시작할 때 Load도 호출되기도 전에 Save가 먼저 호출되기도 한다.
        // (OnApplicationPause 통해서)
        // 실제 기기에서도 이럴 수 있나? 이러면 망인데...
        // 그래서 플래그를 하나 추가한다. 이 플래그는 로드가 제대로 한번 됐을 때 true로 변경된다.
        if (spawner.loadedAtLeastOnce == false)
        {
            Debug.LogWarning(
                "****** Save() called before first Load(). There might be an error during Load(). Save() will be skipped to prevent losing your save data.");
            return(false);
        }

        var balloonSaveData2 = new BalloonSaveData2();

        SushiDebug.LogFormat("Saving...");
        balloonSaveData2.version = LatestVersion;

        return(SaveBalloonSaveData2(balloonSaveData2));
    }
コード例 #3
0
    public static bool Save(IBlackContext context, ConfigPopup configPopup, Sound sound, Data data, StageSaveData wipStageSaveData)
    {
        // 에디터에서 간혹 게임 플레이 시작할 때 Load도 호출되기도 전에 Save가 먼저 호출되기도 한다.
        // (OnApplicationPause 통해서)
        // 실제 기기에서도 이럴 수 있나? 이러면 망인데...
        // 그래서 플래그를 하나 추가한다. 이 플래그는 로드가 제대로 한번 됐을 때 true로 변경된다.
        if (context == null || context.LoadedAtLeastOnce == false)
        {
            Debug.LogWarning(
                "****** Save() called before first Load(). There might be an error during Load(). Save() will be skipped to prevent losing your save data.");
            return(false);
        }

        var blackSaveData = new BlackSaveData
        {
            version                  = LatestVersion,
            lastClearedStageId       = BlackContext.instance.LastClearedStageId,
            lastClearedStageIdEvent  = BlackContext.instance.LastClearedStageIdEvent,
            goldScUInt128            = BlackContext.instance.Gold,
            clearedDebrisIndexList   = BlackContext.instance.GetDebrisState(),
            pendingGoldScUInt128     = BlackContext.instance.PendingGold,
            bgmAudioVolume           = 1.0f,
            sfxAudioVolume           = 1.0f,
            muteBgmAudioSource       = Sound.instance.BgmAudioSourceActive == false,
            muteSfxAudioSource       = Sound.instance.SfxAudioSourceActive == false,
            maxBlackLevelGathered    = BlackContext.instance.AchievementGathered.MaxBlackLevel,
            maxBlackLevelRedeemed    = BlackContext.instance.AchievementRedeemed.MaxBlackLevel,
            maxColoringComboGathered = BlackContext.instance.AchievementGathered.MaxColoringCombo,
            maxColoringComboRedeemed = BlackContext.instance.AchievementRedeemed.MaxColoringCombo,
            //stageLockRemainTime = StageDetail.instance.StageLockDetailTime,
            wipStageSaveData = wipStageSaveData,
            performanceMode  = ConfigPopup.instance.IsPerformanceModeOn,
        };

        return(SaveBlackSaveData(blackSaveData));
    }
コード例 #4
0
    public async Task UploadSaveFileIncidentAsync(List <Exception> exceptionList, string st, bool notCriticalError)
    {
        var uploadSaveFileDbUrl = ConfigPopup.BaseUrl + "/save";

        ProgressMessage.instance.Open("\\저장 파일 문제 업로드 중...".Localized());

        var errorDeviceId = GetOrCreateErrorDeviceId();
        var url           = $"{uploadSaveFileDbUrl}/{errorDeviceId}";
        var saveFile      = new ErrorFile();
        var uploadDate    = DateTime.UtcNow;

        try
        {
            saveFile.fields.uploadDate.timestampValue = uploadDate.ToString("yyyy-MM-ddTHH:mm:ssZ");
        }
        catch
        {
            // ignored
        }

        try
        {
            saveFile.fields.stackTraceMessage.stringValue = string.Join("///", exceptionList.Select(e => e.ToString()));
        }
        catch
        {
            // ignored
        }

        try
        {
            saveFile.fields.appMetaInfo.stringValue = ConfigPopup.GetAppMetaInfo();
        }
        catch
        {
            // ignored
        }

        try
        {
            saveFile.fields.userId.stringValue = ConfigPopup.GetUserId();
        }
        catch
        {
            // ignored
        }

        try
        {
            LoadSaveDataSafe(ref saveFile.fields.saveData);
        }
        catch (Exception e)
        {
            // 문제가 있는 파일을 업로드하는 것 조차 실패했다. 이건 수가 없네...
            ProgressMessage.instance.Close();
            ConfirmPopup.instance.Open($"SAVE FILE UPLOAD FAILED: {e}", () =>
            {
                if (notCriticalError == false)
                {
                    Application.Quit();
                }
                else
                {
                    ConfirmPopup.instance.Close();
                }
            });
            return;
        }

        try
        {
            using var httpClient = new HttpClient();
            var patchData = JsonUtility.ToJson(saveFile);
            using var patchContent = new StringContent(patchData);
            ConDebug.Log($"HttpClient PATCH TO {url}...");

            // PATCH 시작하고 기다린다.
            var patchTask = await httpClient.PatchAsync(new Uri(url), patchContent);

            ConDebug.Log($"HttpClient Result: {patchTask.ReasonPhrase}");

            if (patchTask.IsSuccessStatusCode)
            {
                var msg =
                    @"\$저장 데이터 개발팀으로 제출 결과$"
                    .Localized(errorDeviceId, patchData.Length, saveFile.fields.uploadDate.timestampValue);
                if (notCriticalError == false)
                {
                    ConfirmPopup.instance.OpenTwoButtonPopup(msg, () => ConfigPopup.instance.OpenCommunity(),
                                                             () => SaveLoadManager.EnterRecoveryCode(exceptionList, st, false),
                                                             "\\업로드 완료".Localized(), "\\공식 카페 이동".Localized(), "\\복구 코드 입력".Localized());
                }
                else
                {
                    ConfirmPopup.instance.OpenTwoButtonPopup(msg, () => ConfirmPopup.instance.Close(),
                                                             () => SaveLoadManager.EnterRecoveryCode(exceptionList, st, true),
                                                             "\\업로드 완료".Localized(), "\\닫기".Localized(), "\\복구 코드 입력".Localized());
                }
            }
            else
            {
                ShortMessage.instance.Show($"{patchTask.ReasonPhrase}");
                if (notCriticalError == false) // 다시 안내 팝업 보여주도록 한다.
                {
                    SaveLoadManager.ProcessCriticalLoadError(exceptionList, st);
                }
                else
                {
                    ConfirmPopup.instance.Open($"SAVE FILE UPLOAD FAILED: {patchTask.ReasonPhrase}");
                }
            }
        }
        catch (Exception e)
        {
            if (Debug.isDebugBuild)
            {
                Debug.LogException(e);
            }

            ConfirmPopup.instance.Open(e.Message, () =>
            {
                if (notCriticalError == false) // 다시 안내 팝업 보여주도록 한다.
                {
                    SaveLoadManager.ProcessCriticalLoadError(exceptionList, st);
                }
                else
                {
                    ConfirmPopup.instance.Close();
                }
            });
        }
        finally
        {
            // 어떤 경우가 됐든지 마지막으로는 진행 상황 창을 닫아야 한다.
            ProgressMessage.instance.Close();
        }
    }
コード例 #5
0
ファイル: BlackLogManager.cs プロジェクト: gasbank/black
    public async Task <string> UploadPlayLogAsync(byte[] playLogBytes, int uncompressedBytesLength,
                                                  string progressMessage, string receiptDomain, string receiptId, string receipt)
    {
        var hasReceipt = string.IsNullOrEmpty(receiptDomain) == false && string.IsNullOrEmpty(receiptId) == false &&
                         string.IsNullOrEmpty(receipt) == false;
        var uploadPlayLogFileOrReceiptDbUrl = ConfigPopup.BaseUrl + "/" + (hasReceipt ? receiptDomain : "playLog");
        var ownProgressMessage = string.IsNullOrEmpty(progressMessage) == false;

        if (ownProgressMessage)
        {
            ProgressMessage.instance.Open(progressMessage);
        }

        var errorDeviceId = ErrorReporter.instance.GetOrCreateErrorDeviceId();
        var url           = string.Format("{0}/{1}", uploadPlayLogFileOrReceiptDbUrl, hasReceipt ? receiptId : errorDeviceId);
        var saveFile      = new PlayLogFile();
        var uploadDate    = DateTime.UtcNow;

        try
        {
            saveFile.fields.uploadDate.timestampValue = uploadDate.ToString("yyyy-MM-ddTHH:mm:ssZ");
        }
        catch
        {
            saveFile.fields.uploadDate.timestampValue = "ERROR";
        }

        try
        {
            saveFile.fields.appMetaInfo.stringValue = ConfigPopup.GetAppMetaInfo();
        }
        catch
        {
            saveFile.fields.appMetaInfo.stringValue = "ERROR";
        }

        try
        {
            saveFile.fields.userId.stringValue = ConfigPopup.GetUserId();
        }
        catch
        {
            saveFile.fields.userId.stringValue = "ERROR";
        }

        try
        {
            saveFile.fields.saveData.bytesValue =
                Convert.ToBase64String(File.ReadAllBytes(SaveLoadManager.LoadFileName));
        }
        catch
        {
            saveFile.fields.saveData.bytesValue = "ERROR";
        }

        try
        {
            saveFile.fields.playLogData.bytesValue = Convert.ToBase64String(playLogBytes);
        }
        catch
        {
            saveFile.fields.playLogData.bytesValue = "ERROR";
        }

        try
        {
            saveFile.fields.playLogUncompressedSizeData.integerValue = uncompressedBytesLength;
        }
        catch
        {
            saveFile.fields.playLogUncompressedSizeData.integerValue = 0;
        }

        try
        {
            saveFile.fields.gemStr.stringValue = BlackContext.instance.Gem.ToString("n0");
        }
        catch
        {
            saveFile.fields.gemStr.stringValue = "ERROR";
        }

        try
        {
            saveFile.fields.socialUserName.stringValue = Social.localUser.userName;
        }
        catch
        {
            saveFile.fields.socialUserName.stringValue = "ERROR";
        }

        try
        {
            saveFile.fields.receiptDomain.stringValue = receiptDomain;
        }
        catch
        {
            saveFile.fields.receiptDomain.stringValue = "ERROR";
        }

        try
        {
            saveFile.fields.receiptId.stringValue = receiptId;
        }
        catch
        {
            saveFile.fields.receiptId.stringValue = "ERROR";
        }

        try
        {
            saveFile.fields.receipt.stringValue = receipt;
        }
        catch
        {
            saveFile.fields.receipt.stringValue = "ERROR";
        }

        var reasonPhrase = "";

        try
        {
            using (var httpClient = new HttpClient())
            {
                var patchData = JsonUtility.ToJson(saveFile);
                using (var patchContent = new StringContent(patchData))
                {
                    ConDebug.Log($"HttpClient PATCH TO {url}...");

                    // PATCH 시작하고 기다린다.
                    var patchTask = await httpClient.PatchAsync(new Uri(url), patchContent);

                    ConDebug.Log($"HttpClient Result: {patchTask.ReasonPhrase}");

                    if (patchTask.IsSuccessStatusCode)
                    {
                        ConDebug.Log("Play log uploaded successfully.");
                        //var msg = string.Format("\\업로드가 성공적으로 완료됐습니다.\\n\\n업로드 코드: {0}\\n용량: {1:n0}바이트\\nTS: {2}\\n\\n<color=brown>본 화면의 스크린샷을 찍어 공식 카페에 버그 신고를 부탁 드립니다.</color>\\n\\n업로드된 데이터를 분석 후, 카페를 통해 이후 진행을 안내드리겠습니다.\\n\\n공식 카페로 이동하거나, 안내 받은 복구 코드를 입력하세요.".Localized(), errorDeviceId, patchData.Length, saveFile.fields.uploadDate.timestampValue);
                        //ConfirmPopup.instance.OpenTwoButtonPopup(msg, () => ConfigPopup.instance.OpenCommunity(), () => SaveLoadManager.EnterRecoveryCode(exceptionList, st), "\\업로드 완료".Localized(), "\\공식 카페 이동".Localized(), "\\복구 코드 입력".Localized());
                    }
                    else
                    {
                        Debug.LogError($"Play log upload failed: status code={patchTask.StatusCode}");
                        reasonPhrase = patchTask.ReasonPhrase;
                    }
                }
            }
        }
        catch (Exception e)
        {
            Debug.LogError($"Play log upload exception: {e}");
        }
        finally
        {
            if (ownProgressMessage)
            {
                // 어떤 경우가 됐든지 마지막으로는 진행 상황 창을 닫아야 한다.
                ProgressMessage.instance.Close();
            }
        }

        return(reasonPhrase);
    }