public class ChartInfo {
public string chartName;
public string chartFileId;
public string updateDate;
public ChartInfo(JsonData json) {
chartName = json["chartName"].ToString();
chartFileId = json["chartFileId"].ToString();
updateDate = json["updateDate"].ToString();
}
}
public void ChartDownload() {
Backend.BMember.CustomLogin("user1", "user1");
// 특정 폴더에 있는 차트를 모두 불러옵니다.
// 다만 해당 폴더에는 ChartManager 차트 하나만 존재할 예정이므로 무조건 1개만 리턴됩니다.
var bro = Backend.Chart.GetChartListByFolder(1051);
// 해당 폴더에는 chartManager 차트 하나만 존재할 것이므로 0으로 접근합니다.
string chartManagerFileId = bro.FlattenRows()[0]["selectedChartFileId"].ToString();
string chartManagerName = bro.FlattenRows()[0]["chartName"].ToString();
// 서버에서 ChartManager 차트를 불러옵니다. 기기에 저장하지는 않습니다.
var serverChartBro = Backend.Chart.GetChartContents(chartManagerFileId);
// 서버에서 불러오지 못할 경우에는 데이터 꼬임 방지를 위해 진행을 중지합니다.
if (serverChartBro.IsSuccess() == false) {
return;
}
// 서버에서 불러온 ChartManager을 언마샬하여 JsonData 형태로 캐싱합니다.
JsonData newChartManagerJson = serverChartBro.FlattenRows();
// 차트 이름으로 데이터를 검색할 것이기 때문에 Dictnary로 생성합니다.
// 해당 Dictnary는 최신 버전으로 업데이트할 차트 리스트로 사용됩니다.(최신 버전이라면 해당 리스트에서 제외)
Dictionary chartInfoDic = new Dictionary();
// 반복문을 통해 모든 ChartManager 차트에 저장된 모든 차트들을 삽입합니다.
foreach (JsonData chartInfoJson in newChartManagerJson) {
ChartInfo chartInfo = new ChartInfo(chartInfoJson);
chartInfoDic.Add(chartInfo.chartName, chartInfo);
}
// 기기에 저장된 chartManager 차트를 불러옵니다.
string deviceChartManagerString = Backend.Chart.GetLocalChartData(chartManagerName);
// 기기에는 string 형태로 저장이 되며, 저장되어있지 않을 경우 string.Empty가 반환됩니다.
if (string.IsNullOrEmpty(deviceChartManagerString) == false) {
// 기기에 저장된 chartManager 차트가 존재한다면
// 기기에 저장된 string형태의 chartManager를 Json 형태로 변경
JsonData deviceChartManagerJson = JsonMapper.ToObject(deviceChartManagerString);
deviceChartManagerJson = BackendReturnObject.Flatten(deviceChartManagerJson);
// 기기에 저장된 chartManager 차트 속 차트들을 서버에서 불러온 데이터와 대조합니다.
foreach (JsonData deviceChartJson in deviceChartManagerJson["rows"]) {
ChartInfo deviceChartInfo = new ChartInfo(deviceChartJson);
// 이미 기기에 저장되어 있는 차트가 있는지 확인합니다.
if (chartInfoDic.ContainsKey(deviceChartInfo.chartName)) {
// 기기에 저장되어 있는 차트의 수정 날짜(updateDate)가 일치하는지 확인합니다.
if (chartInfoDic[deviceChartInfo.chartName].updateDate == deviceChartInfo.updateDate) {
// 수정날짜까지 일치할 경우, 재다운로드 리스트(chartInfoDic)에서 제외합니다.
chartInfoDic.Remove(deviceChartInfo.chartName);
}
}
}
}
// 재다운로드할 차트 리스트에서 차트가 하나라도 존재하는지 확인합니다.
if (chartInfoDic.Count > 0) {
// 차트를 재다운로드하여 기기에 덮어씌웁니다.
foreach(var downloadChartInfo in chartInfoDic) {
Debug.Log(downloadChartInfo.Value.chartName + "을 새로운 버전으로 다운받습니다.");
Backend.Chart.GetOneChartAndSave(downloadChartInfo.Value.chartFileId, downloadChartInfo.Value.chartName);
}
// chartManager 차트를 최신화합니다.
Backend.Chart.GetOneChartAndSave(chartManagerFileId, chartManagerName);
}
else {
Debug.Log("업데이트할 내역이 존재하지 않습니다.");
}
// 차트 갱신 끝
// 이후로는 기기에 저장된 차트 리스트들을 이용하여 List 혹은 Dictionary 형태로 변경하여 게임에 맞게 사용하시면 됩니다.
// 예시
Backend.Chart.GetLocalChartData("WeaponChart");
Backend.Chart.GetLocalChartData("ShopChart");
// 상세 예시
JsonData enemyChartJson = JsonMapper.ToObject(Backend.Chart.GetLocalChartData("EnemyChart"));
enemyChartJson = BackendReturnObject.Flatten(enemyChartJson);
List enemyInfoList = new List();
foreach(JsonData enemyChart in enemyChartJson) {
enemyInfoList.Add(new EnemyInfo(enemyChart));
}
}
줄이면 차관차인가요 차차인가요??
차관차로 가시죠?