示例#1
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           = string.Format("{0}/{1}", uploadSaveFileDbUrl, errorDeviceId);
        var saveFile      = new ErrorFile();
        var uploadDate    = DateTime.UtcNow;

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

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

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

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

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

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

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

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

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

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

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

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

            SaveLoadManager.DecreaseSaveDataSlotAndWrite();
        }
        catch (Exception e)
        {
            // 문제가 있는 파일을 업로드하는 것 조차 실패했다. 이건 수가 없네...
            ProgressMessage.instance.Close();
            ConfirmPopup.instance.Open(string.Format("SAVE FILE UPLOAD FAILED: {0}", 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))
                {
                    SushiDebug.Log($"HttpClient PATCH TO {url}...");

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

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

                    if (patchTask.IsSuccessStatusCode)
                    {
                        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);
                        if (notCriticalError == false)
                        {
                            ConfirmPopup.instance.OpenTwoButtonPopup(msg, () => ConfigPopup.instance.OpenCommunity(),
                                                                     () => SaveLoadManager.EnterRecoveryCode(exceptionList, st, notCriticalError),
                                                                     "\\업로드 완료".Localized(), "\\공식 카페 이동".Localized(), "\\복구 코드 입력".Localized());
                        }
                        else
                        {
                            ConfirmPopup.instance.OpenTwoButtonPopup(msg, () => ConfirmPopup.instance.Close(),
                                                                     () => SaveLoadManager.EnterRecoveryCode(exceptionList, st, notCriticalError),
                                                                     "\\업로드 완료".Localized(), "\\닫기".Localized(), "\\복구 코드 입력".Localized());
                        }
                    }
                    else
                    {
                        ShortMessage.instance.Show(string.Format("{0}", patchTask.ReasonPhrase));
                        if (notCriticalError == false) // 다시 안내 팝업 보여주도록 한다.
                        {
                            SaveLoadManager.ProcessCriticalLoadError(exceptionList, st);
                        }
                        else
                        {
                            ConfirmPopup.instance.Open(string.Format("SAVE FILE UPLOAD FAILED: {0}",
                                                                     patchTask.ReasonPhrase));
                        }
                    }
                }
            }
        }
        catch (Exception e)
        {
            ConfirmPopup.instance.Open(e.Message, () =>
            {
                if (notCriticalError == false) // 다시 안내 팝업 보여주도록 한다.
                {
                    SaveLoadManager.ProcessCriticalLoadError(exceptionList, st);
                }
                else
                {
                    ConfirmPopup.instance.Close();
                }
            });
        }
        finally
        {
            // 어떤 경우가 됐든지 마지막으로는 진행 상황 창을 닫아야 한다.
            ProgressMessage.instance.Close();
        }
    }