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(); } }