直接上代碼
1 #include "stdafx.h"
2 #include <fstream>
3 #include "Json.h"
4
5 #include "ShopLogic.h"
6 #include "src/FileCsv/WebUrlConfig.h"
7 #include "src/support/GlobalDefine.h"
8
9 using namespace std;
10
11 const char *g_pcszWebDataSaveFile = "shopWebData_";
12
13 ///////////////////////////////////////////////////////////////////////////////
14 /// class CShopData
15 ///
16 CShopData *getShopData() {
17 return ChaSingleton<CShopData>::singleton();
18 }
19
20 CShopData::CShopData() {
21
22 }
23
24 CShopData::~CShopData() {
25
26 }
27
28 ///
29 /// Add by (jacc.kim) [2014-10-16 17:01]
30 /// 將從web下發的商品列表數據保存到本地配置中.注意:如果列表為空,則不保存,
31 /// 同時舊有的本地數據也不清空。
32 ///
33 void CShopData::saveShopWebItems(const TShopWebDataVec &vecItems) {
34 if (vecItems.empty()) {
35 return ;
36 }
37 ShopWebDataLog("========================================================");
38 ShopWebDataLog("準備保存寶石商店數據到本地文件.");
39 std::string strFileName("");
40 this->generateWebDataSaveFileName(strFileName);
41 ShopWebDataLog("保存數據文件名稱: %s", strFileName.c_str());
42 ofstream fout;
43 fout.open(strFileName.c_str());
44 if (!fout.is_open()) {
45 ShopWebDataLog("打開或創建文件失敗");
46 return ;
47 }
48 Json::Value jRoot;
49 Json::Value jArray;
50 Json::Value jItem;
51 Json::Value jHttpData;
52 Json::Value jTreasureInfo;
53 typedef Json::Value::Int TJInt;
54
55 CShopHttpDataTotal *pWebDataItem = NULL;
56 const TShopWebDataVec::size_type nAmount = vecItems.size();
57 for (TShopWebDataVec::size_type nIdx = 0; nIdx < nAmount; ++nIdx) {
58 pWebDataItem = vecItems[nIdx];
59 if (NULL == pWebDataItem) {
60 continue ;
61 }
62 // 保存 網絡商店的數據(即:CShopHttpData) 數據
63 jHttpData["pc_id"] = pWebDataItem->httpData.pc_id.c_str();
64 jHttpData["pc_name"] = pWebDataItem->httpData.pc_name.c_str();
65 jHttpData["pc_point"] = (TJInt)pWebDataItem->httpData.pc_point;
66 jHttpData["pc_type"] = pWebDataItem->httpData.pc_type.c_str();
67 jHttpData["pc_flag"] = (TJInt)pWebDataItem->httpData.pc_flag;
68 jHttpData["pc_credit_rate"] = pWebDataItem->httpData.pc_credit_rate.c_str();
69 jHttpData["pcc_price_usd"] = pWebDataItem->httpData.pcc_price_usd.c_str();
70 jHttpData["pcc_price_cfg"] = pWebDataItem->httpData.pcc_price_cfg.c_str();
71 jHttpData["pcc_memo"] = pWebDataItem->httpData.pcc_memo.c_str();
72 jHttpData["pc_free_point"] = (TJInt)pWebDataItem->httpData.pc_free_point;
73 jHttpData["ppc_end_time"] = pWebDataItem->httpData.ppc_end_time.c_str();
74 #ifdef ORDERS_PROMOTIONS
75 jHttpData["pcc_presen_count"] = (TJInt)pWebDataItem->httpData.pcc_presen_count;
76 #else //#ifdef ORDERS_PROMOTIONS
77 jHttpData["pcc_presen_count"] = (TJInt)0;
78 #endif//#ifdef ORDERS_PROMOTIONS
79
80 // 保存 商城財產相關信息(即:TreasureInfo) 數據
81 jTreasureInfo["nIconStatus"] = (TJInt)pWebDataItem->localData.nIconStatus;
82 jTreasureInfo["nTextStatus"] = (TJInt)pWebDataItem->localData.nTextStatus;
83 jTreasureInfo["nBuyType"] = (TJInt)pWebDataItem->localData.nBuyType;
84 jTreasureInfo["nCostType"] = (TJInt)pWebDataItem->localData.nCostType;
85 jTreasureInfo["nBuyNumber"] = (TJInt)pWebDataItem->localData.nBuyNumber;
86 jTreasureInfo["nCostNumber"] = (TJInt)pWebDataItem->localData.nCostNumber;
87 jTreasureInfo["nCapacityPercentage"] = (TJInt)pWebDataItem->localData.nCapacityPercentage;
88 jTreasureInfo["strName"] = pWebDataItem->localData.strName.c_str();
89 jTreasureInfo["strTitleTid"] = pWebDataItem->localData.strTitleTid.c_str();
90 jTreasureInfo["strIconAddress"] = pWebDataItem->localData.strIconAddress.c_str();
91 jTreasureInfo["nCooling"] = (TJInt)pWebDataItem->localData.nCooling;
92
93 jItem["CShopHttpData"] = jHttpData;
94 jItem["TreasureInfo"] = jTreasureInfo;
95 jArray.append(jItem);
96 }
97 ShopWebDataLog("待保存的寶石商店數據: %d 條, 實際保存成功: %d 條"
98 , static_cast<int>(nAmount), static_cast<int>(jArray.size()));
99 jRoot["CShopHttpDataTotal"] = jArray;
100 fout << jRoot.toStyledString() << endl;
101 fout.close();
102 }
103
104 ///
105 /// Add by (jacc.kim) [2014-10-16 17:02]
106 /// 從本地加載web商品列表數據.并返回.注意:剛進入接口內部時,參數列表必被清空.
107 /// 然后再從本地文件中加載.
108 ///
109 void CShopData::getLocalShopWebItems(TShopWebDataVec &vecOutItems) {
110 ShopWebDataLog("--------------------------------------------------------");
111 ShopWebDataLog("準備從本地提取數據寶石商店數據.");
112 vecOutItems.clear();
113 std::string strFileName("");
114 this->generateWebDataSaveFileName(strFileName);
115 ShopWebDataLog("本地數據源文件名稱: %s", strFileName.c_str());
116 ifstream fin;
117 fin.open(strFileName.c_str());
118 if (!fin.is_open()) {
119 ShopWebDataLog("本地數據源文件不存在或已損壞,打開失敗");
120 return ;
121 }
122 Json::Reader jReader;
123 Json::Value jRoot;
124 Json::Value jHttpData;
125 Json::Value jTreasureInfo;
126 if (!jReader.parse(fin, jRoot)) {
127 ShopWebDataLog("本地數據源文件糟破壞,解析失敗");
128 return ;
129 }
130 CShopHttpDataTotal *pWebDataItem = NULL;
131 const int nAmount = static_cast<int>(jRoot["CShopHttpDataTotal"].size());
132 for (int nIdx = 0; nIdx < nAmount; ++nIdx) {
133 pWebDataItem = new CShopHttpDataTotal();
134 if (NULL == pWebDataItem) {
135 break ;
136 }
137 jHttpData = jRoot["CShopHttpDataTotal"][nIdx]["CShopHttpData"];
138 pWebDataItem->httpData.pc_id = jHttpData["pc_id"].asString();
139 pWebDataItem->httpData.pc_name = jHttpData["pc_name"].asString();
140 pWebDataItem->httpData.pc_point = jHttpData["pc_point"].asInt();
141 pWebDataItem->httpData.pc_type = jHttpData["pc_type"].asString();
142 pWebDataItem->httpData.pc_flag = jHttpData["pc_flag"].asInt();
143 pWebDataItem->httpData.pc_credit_rate = jHttpData["pc_credit_rate"].asString();
144 pWebDataItem->httpData.pcc_price_usd = jHttpData["pcc_price_usd"].asString();
145 pWebDataItem->httpData.pcc_price_cfg = jHttpData["pcc_price_cfg"].asString();
146 pWebDataItem->httpData.pcc_memo = jHttpData["pcc_memo"].asString();
147 pWebDataItem->httpData.pc_free_point = jHttpData["pc_free_point"].asInt();
148 pWebDataItem->httpData.ppc_end_time = jHttpData["ppc_end_time"].asString();
149 #ifdef ORDERS_PROMOTIONS
150 pWebDataItem->httpData.pcc_presen_count = jHttpData["pcc_presen_count"].asInt();
151 #else //#ifdef ORDERS_PROMOTIONS
152 // do nothing here
..
153 #endif//#ifdef ORDERS_PROMOTIONS
154
155 jTreasureInfo = jRoot["CShopHttpDataTotal"][nIdx]["TreasureInfo"];
156 pWebDataItem->localData.nIconStatus = jTreasureInfo["nIconStatus"].asInt();
157 pWebDataItem->localData.nTextStatus = jTreasureInfo["nTextStatus"].asInt();
158 pWebDataItem->localData.nBuyType = jTreasureInfo["nBuyType"].asInt();
159 pWebDataItem->localData.nCostType = jTreasureInfo["nCostType"].asInt();
160 pWebDataItem->localData.nBuyNumber = jTreasureInfo["nBuyNumber"].asInt();
161 pWebDataItem->localData.nCostNumber = jTreasureInfo["nCostNumber"].asInt();
162 pWebDataItem->localData.nCapacityPercentage = jTreasureInfo["nCapacityPercentage"].asInt();
163 pWebDataItem->localData.strName = jTreasureInfo["strName"].asString();
164 pWebDataItem->localData.strTitleTid = jTreasureInfo["strTitleTid"].asString();
165 pWebDataItem->localData.strIconAddress = jTreasureInfo["strIconAddress"].asString();
166 pWebDataItem->localData.nCooling = jTreasureInfo["nCooling"].asInt();
167
168 vecOutItems.push_back(pWebDataItem);
169 }
170 ShopWebDataLog("本地數據源共: %d 條數據, 實際解析成功: %d 條"
171 , nAmount, static_cast<int>(vecOutItems.size()));
172 fin.close();
173 }
174
175 void CShopData::generateWebDataSaveFileName(std::string &strFileName) {
176 strFileName = g_pcszWebDataSaveFile;
177 CWebUrlConfig *pUrlCfg = CWebUrlConfigInstance::singleton();
178 std::string strGameId = pUrlCfg->getWebUrlAddress("gameid");
179 strFileName = strFileName + strGameId + ".json";
180 }
2 #include <fstream>
3 #include "Json.h"
4
5 #include "ShopLogic.h"
6 #include "src/FileCsv/WebUrlConfig.h"
7 #include "src/support/GlobalDefine.h"
8
9 using namespace std;
10
11 const char *g_pcszWebDataSaveFile = "shopWebData_";
12
13 ///////////////////////////////////////////////////////////////////////////////
14 /// class CShopData
15 ///
16 CShopData *getShopData() {
17 return ChaSingleton<CShopData>::singleton();
18 }
19
20 CShopData::CShopData() {
21
22 }
23
24 CShopData::~CShopData() {
25
26 }
27
28 ///
29 /// Add by (jacc.kim) [2014-10-16 17:01]
30 /// 將從web下發的商品列表數據保存到本地配置中.注意:如果列表為空,則不保存,
31 /// 同時舊有的本地數據也不清空。
32 ///
33 void CShopData::saveShopWebItems(const TShopWebDataVec &vecItems) {
34 if (vecItems.empty()) {
35 return ;
36 }
37 ShopWebDataLog("========================================================");
38 ShopWebDataLog("準備保存寶石商店數據到本地文件.");
39 std::string strFileName("");
40 this->generateWebDataSaveFileName(strFileName);
41 ShopWebDataLog("保存數據文件名稱: %s", strFileName.c_str());
42 ofstream fout;
43 fout.open(strFileName.c_str());
44 if (!fout.is_open()) {
45 ShopWebDataLog("打開或創建文件失敗");
46 return ;
47 }
48 Json::Value jRoot;
49 Json::Value jArray;
50 Json::Value jItem;
51 Json::Value jHttpData;
52 Json::Value jTreasureInfo;
53 typedef Json::Value::Int TJInt;
54
55 CShopHttpDataTotal *pWebDataItem = NULL;
56 const TShopWebDataVec::size_type nAmount = vecItems.size();
57 for (TShopWebDataVec::size_type nIdx = 0; nIdx < nAmount; ++nIdx) {
58 pWebDataItem = vecItems[nIdx];
59 if (NULL == pWebDataItem) {
60 continue ;
61 }
62 // 保存 網絡商店的數據(即:CShopHttpData) 數據
63 jHttpData["pc_id"] = pWebDataItem->httpData.pc_id.c_str();
64 jHttpData["pc_name"] = pWebDataItem->httpData.pc_name.c_str();
65 jHttpData["pc_point"] = (TJInt)pWebDataItem->httpData.pc_point;
66 jHttpData["pc_type"] = pWebDataItem->httpData.pc_type.c_str();
67 jHttpData["pc_flag"] = (TJInt)pWebDataItem->httpData.pc_flag;
68 jHttpData["pc_credit_rate"] = pWebDataItem->httpData.pc_credit_rate.c_str();
69 jHttpData["pcc_price_usd"] = pWebDataItem->httpData.pcc_price_usd.c_str();
70 jHttpData["pcc_price_cfg"] = pWebDataItem->httpData.pcc_price_cfg.c_str();
71 jHttpData["pcc_memo"] = pWebDataItem->httpData.pcc_memo.c_str();
72 jHttpData["pc_free_point"] = (TJInt)pWebDataItem->httpData.pc_free_point;
73 jHttpData["ppc_end_time"] = pWebDataItem->httpData.ppc_end_time.c_str();
74 #ifdef ORDERS_PROMOTIONS
75 jHttpData["pcc_presen_count"] = (TJInt)pWebDataItem->httpData.pcc_presen_count;
76 #else //#ifdef ORDERS_PROMOTIONS
77 jHttpData["pcc_presen_count"] = (TJInt)0;
78 #endif//#ifdef ORDERS_PROMOTIONS
79
80 // 保存 商城財產相關信息(即:TreasureInfo) 數據
81 jTreasureInfo["nIconStatus"] = (TJInt)pWebDataItem->localData.nIconStatus;
82 jTreasureInfo["nTextStatus"] = (TJInt)pWebDataItem->localData.nTextStatus;
83 jTreasureInfo["nBuyType"] = (TJInt)pWebDataItem->localData.nBuyType;
84 jTreasureInfo["nCostType"] = (TJInt)pWebDataItem->localData.nCostType;
85 jTreasureInfo["nBuyNumber"] = (TJInt)pWebDataItem->localData.nBuyNumber;
86 jTreasureInfo["nCostNumber"] = (TJInt)pWebDataItem->localData.nCostNumber;
87 jTreasureInfo["nCapacityPercentage"] = (TJInt)pWebDataItem->localData.nCapacityPercentage;
88 jTreasureInfo["strName"] = pWebDataItem->localData.strName.c_str();
89 jTreasureInfo["strTitleTid"] = pWebDataItem->localData.strTitleTid.c_str();
90 jTreasureInfo["strIconAddress"] = pWebDataItem->localData.strIconAddress.c_str();
91 jTreasureInfo["nCooling"] = (TJInt)pWebDataItem->localData.nCooling;
92
93 jItem["CShopHttpData"] = jHttpData;
94 jItem["TreasureInfo"] = jTreasureInfo;
95 jArray.append(jItem);
96 }
97 ShopWebDataLog("待保存的寶石商店數據: %d 條, 實際保存成功: %d 條"
98 , static_cast<int>(nAmount), static_cast<int>(jArray.size()));
99 jRoot["CShopHttpDataTotal"] = jArray;
100 fout << jRoot.toStyledString() << endl;
101 fout.close();
102 }
103
104 ///
105 /// Add by (jacc.kim) [2014-10-16 17:02]
106 /// 從本地加載web商品列表數據.并返回.注意:剛進入接口內部時,參數列表必被清空.
107 /// 然后再從本地文件中加載.
108 ///
109 void CShopData::getLocalShopWebItems(TShopWebDataVec &vecOutItems) {
110 ShopWebDataLog("--------------------------------------------------------");
111 ShopWebDataLog("準備從本地提取數據寶石商店數據.");
112 vecOutItems.clear();
113 std::string strFileName("");
114 this->generateWebDataSaveFileName(strFileName);
115 ShopWebDataLog("本地數據源文件名稱: %s", strFileName.c_str());
116 ifstream fin;
117 fin.open(strFileName.c_str());
118 if (!fin.is_open()) {
119 ShopWebDataLog("本地數據源文件不存在或已損壞,打開失敗");
120 return ;
121 }
122 Json::Reader jReader;
123 Json::Value jRoot;
124 Json::Value jHttpData;
125 Json::Value jTreasureInfo;
126 if (!jReader.parse(fin, jRoot)) {
127 ShopWebDataLog("本地數據源文件糟破壞,解析失敗");
128 return ;
129 }
130 CShopHttpDataTotal *pWebDataItem = NULL;
131 const int nAmount = static_cast<int>(jRoot["CShopHttpDataTotal"].size());
132 for (int nIdx = 0; nIdx < nAmount; ++nIdx) {
133 pWebDataItem = new CShopHttpDataTotal();
134 if (NULL == pWebDataItem) {
135 break ;
136 }
137 jHttpData = jRoot["CShopHttpDataTotal"][nIdx]["CShopHttpData"];
138 pWebDataItem->httpData.pc_id = jHttpData["pc_id"].asString();
139 pWebDataItem->httpData.pc_name = jHttpData["pc_name"].asString();
140 pWebDataItem->httpData.pc_point = jHttpData["pc_point"].asInt();
141 pWebDataItem->httpData.pc_type = jHttpData["pc_type"].asString();
142 pWebDataItem->httpData.pc_flag = jHttpData["pc_flag"].asInt();
143 pWebDataItem->httpData.pc_credit_rate = jHttpData["pc_credit_rate"].asString();
144 pWebDataItem->httpData.pcc_price_usd = jHttpData["pcc_price_usd"].asString();
145 pWebDataItem->httpData.pcc_price_cfg = jHttpData["pcc_price_cfg"].asString();
146 pWebDataItem->httpData.pcc_memo = jHttpData["pcc_memo"].asString();
147 pWebDataItem->httpData.pc_free_point = jHttpData["pc_free_point"].asInt();
148 pWebDataItem->httpData.ppc_end_time = jHttpData["ppc_end_time"].asString();
149 #ifdef ORDERS_PROMOTIONS
150 pWebDataItem->httpData.pcc_presen_count = jHttpData["pcc_presen_count"].asInt();
151 #else //#ifdef ORDERS_PROMOTIONS
152 // do nothing here


153 #endif//#ifdef ORDERS_PROMOTIONS
154
155 jTreasureInfo = jRoot["CShopHttpDataTotal"][nIdx]["TreasureInfo"];
156 pWebDataItem->localData.nIconStatus = jTreasureInfo["nIconStatus"].asInt();
157 pWebDataItem->localData.nTextStatus = jTreasureInfo["nTextStatus"].asInt();
158 pWebDataItem->localData.nBuyType = jTreasureInfo["nBuyType"].asInt();
159 pWebDataItem->localData.nCostType = jTreasureInfo["nCostType"].asInt();
160 pWebDataItem->localData.nBuyNumber = jTreasureInfo["nBuyNumber"].asInt();
161 pWebDataItem->localData.nCostNumber = jTreasureInfo["nCostNumber"].asInt();
162 pWebDataItem->localData.nCapacityPercentage = jTreasureInfo["nCapacityPercentage"].asInt();
163 pWebDataItem->localData.strName = jTreasureInfo["strName"].asString();
164 pWebDataItem->localData.strTitleTid = jTreasureInfo["strTitleTid"].asString();
165 pWebDataItem->localData.strIconAddress = jTreasureInfo["strIconAddress"].asString();
166 pWebDataItem->localData.nCooling = jTreasureInfo["nCooling"].asInt();
167
168 vecOutItems.push_back(pWebDataItem);
169 }
170 ShopWebDataLog("本地數據源共: %d 條數據, 實際解析成功: %d 條"
171 , nAmount, static_cast<int>(vecOutItems.size()));
172 fin.close();
173 }
174
175 void CShopData::generateWebDataSaveFileName(std::string &strFileName) {
176 strFileName = g_pcszWebDataSaveFile;
177 CWebUrlConfig *pUrlCfg = CWebUrlConfigInstance::singleton();
178 std::string strGameId = pUrlCfg->getWebUrlAddress("gameid");
179 strFileName = strFileName + strGameId + ".json";
180 }