#include "common/pch.h" #include #include #include #include"StringUtil.h" #include"NetworkApi.h" #include "JsonUtil.h" #include #include #include #include "md5.h" #include #include #include #include string NetworkApi::_TRADE_SERVER_ADDR = string(MAIN_HOST); int NetworkApi::_TRADE_SERVER_PORT = API_PORT; string NetworkApi::_COMMON_SERVER_ADDR = string(MAIN_HOST); int NetworkApi::_COMMON_SERVER_PORT = API_PORT; string NetworkApi::get_rquest_id() { string requestIdStr; std::chrono::system_clock::time_point now = std::chrono::system_clock::now(); // ½«µ±Ç°Ê±¼äµãת»»Îªtime_tÀàÐÍ std::time_t currentTime = std::chrono::system_clock::to_time_t(now); requestIdStr.append("_").append(std::to_string(currentTime)).append("_"); // Éú³ÉËæ»úÊý std::random_device rd; std::mt19937 rng(rd()); std::uniform_int_distribution intDist(1, 100000); // Éú³É·¶Î§ÔÚ1-100Ö®¼äµÄÕûÊý int randomInt = intDist(rng); requestIdStr.append(std::to_string(randomInt)); return requestIdStr; } string NetworkApi::get_sign(rapidjson::Document& document) { //¼ÆËãÇ©Ãû std::list strList; for (rapidjson::Value::ConstMemberIterator itr = document.MemberBegin(); itr != document.MemberEnd(); ++itr) { std::cout << "¼ü: " << itr->name.GetString() << ", Öµ: "; if (itr->value.IsObject() || itr->value.IsArray()) { //Èç¹ûÊǶÔÏó rapidjson::StringBuffer buffer; rapidjson::Writer writer(buffer); itr->value.Accept(writer); std::string jsonString = buffer.GetString(); strList.push_back(string(itr->name.GetString()).append("=").append(jsonString)); } else { if (itr->value.IsString()) { strList.push_back(string(itr->name.GetString()).append("=").append(itr->value.GetString())); } else if (itr->value.IsInt()) { strList.push_back(string(itr->name.GetString()).append("=").append(std::to_string(itr->value.GetInt()))); } } } strList.sort(); strList.push_back("%Yeshi2014@#."); string src = ""; int index = 0; for (std::list::iterator el = strList.begin(); el != strList.end(); el++) { src.append(*el); index++; if (index != strList.size()) { src.append("&"); } } //MD5 //cout << "¼ÓÃÜǰ×Ö·û´®£º" < writer(buffer); document.Accept(writer); std::string jsonString = buffer.GetString(); //·¢ËÍÊý¾Ý std::stringstream ss; ss << std::setw(8) << std::setfill('0') << jsonString.length(); std::string length_str = string("##").append(ss.str()); std::string fstr = length_str.append(jsonString); return fstr; } //ÍøÂçÇëÇó std::string NetworkApi::base_request(std::string data) { std::string fstr = load_request_data(data); try { return SocketManager::sendMsg(_COMMON_SERVER_ADDR, _COMMON_SERVER_PORT, fstr.c_str()); } catch (...) { throw L"ÍøÂçÇëÇó³ö´í"; } } std::string NetworkApi::base_trade_request(std::string data) { rapidjson::Document document; document.Parse(data.c_str()); string requestIdStr = string(document["type"].GetString()).append(get_rquest_id()); rapidjson::Document::AllocatorType& allocator = document.GetAllocator(); // Ìí¼Ó request_id ×Ö¶Î rapidjson::Value requestId(rapidjson::kStringType); requestId.SetString(requestIdStr.c_str(), allocator); document.AddMember("request_id", requestId, allocator); // Ìí¼ÓÇ©Ãû£¬sign string sign = get_sign(document); rapidjson::Value signV(rapidjson::kStringType); signV.SetString(sign.c_str(), allocator); document.AddMember("sign", signV, allocator); rapidjson::StringBuffer buffer; rapidjson::Writer writer(buffer); document.Accept(writer); std::string jsonString = buffer.GetString(); //·¢ËÍÊý¾Ý std::stringstream ss; ss << std::setw(8) << std::setfill('0') << jsonString.length(); std::string length_str =string("##").append( ss.str()); std::string fstr = length_str.append(jsonString); try { return SocketManager::sendMsg(_TRADE_SERVER_ADDR, _TRADE_SERVER_PORT, fstr.c_str()); } catch (...) { throw wstring(L"ÍøÂçÇëÇó³ö´í"); } } void NetworkApi::__request(std::string code, int type) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.Int(type); writer.Key("data"); writer.StartObject(); writer.Key("codes"); writer.StartArray(); writer.String(code.c_str()); writer.EndArray(); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_request(std::string(json_content)); //JSON½âÎö rapidjson::GenericDocument> root = JsonUtil::parseUTF16(result); if (root[_T("code")].GetInt() != 0) { throw wstring(root[_T("msg")].GetString()); } } std::list NetworkApi::__request_list(int type) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.Int(type); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_request(std::string(json_content)); wstring wresult = StringUtil::Unescape(result); rapidjson::GenericDocument> root; root.Parse(wresult.c_str()); std::list resultList; if (root[_T("code")].GetInt() == 0) { for (rapidjson::SizeType i = 0; i < root[_T("data")].GetArray().Size(); i++) { resultList.push_back(root[_T("data")].GetArray()[i].GetString()); } } return resultList; } //»ñÈ¡´úÂë¼òÒªÐÅÏ¢ wstring NetworkApi::getCodeDesc(std::string code) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.Int(430); writer.Key("data"); writer.StartObject(); writer.Key("code"); writer.String(code.c_str()); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); std::string result = base_request(std::string(json_content)); cout << "´úÂëÐÅÏ¢£º" << result << endl;; wstring wresult = StringUtil::Unescape(result); rapidjson::GenericDocument> root; root.Parse(wresult.c_str()); if (root.IsObject() && root.HasMember( L"code") && root[_T("code")].GetInt() == 0) { if (root.HasMember(L"data")) { if (root[_T("data")].HasMember(L"code_info")) { wstring c = root[_T("data")][_T("code_info")].GetArray()[0].GetString(); wstring name = L""; if (!root[_T("data")][_T("code_info")].GetArray()[1].IsNull()) { name = root[_T("data")][_T("code_info")].GetArray()[1].GetString(); } wstring desc = root[_T("data")][_T("desc")].GetString(); wstring fresult; fresult.append(c).append(L" ").append(name).append(L" ").append(desc); return desc; } } } throw wstring(L"ÉÐδ»ñÈ¡µ½ÄÚÈÝ"); } // ÉèÖý»Ò×״̬ void NetworkApi::set_buy_state(bool is_open) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.Int(501); writer.Key("data"); writer.StartObject(); writer.Key("open"); writer.Bool(is_open); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); base_request(std::string(json_content)); } // »ñÈ¡ÂòÈë״̬ bool NetworkApi::get_buy_state() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.Int(502); writer.Key("data"); writer.StartObject(); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_request(std::string(json_content)); //JSON½âÎö rapidjson::GenericDocument> root = JsonUtil::parseUTF16(result); if (root[_T("code")].GetInt() != 0) { throw wstring(root[_T("msg")].GetString()); } else { return root[_T("data")][_T("can_buy")].GetBool(); } } // »ñÈ¡ÂòÈëģʽ int NetworkApi::get_buy_mode() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.Int(504); writer.Key("data"); writer.StartObject(); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_request(std::string(json_content)); //JSON½âÎö rapidjson::GenericDocument> root = JsonUtil::parseUTF16(result); if (root[_T("code")].GetInt() != 0) { throw wstring(root[_T("msg")].GetString()); } else { return root[_T("data")][_T("mode")].GetInt(); } } //ÉèÖÃÂòÈëģʽ void NetworkApi::set_buy_mode(int mode) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.Int(503); writer.Key("data"); writer.StartObject(); writer.Key("mode"); writer.Int(mode); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_request(std::string(json_content)); //JSON½âÎö rapidjson::GenericDocument> root = JsonUtil::parseUTF16(result); if (root[_T("code")].GetInt() != 0) { throw wstring(root[_T("msg")].GetString()); } } int NetworkApi::get_auto_cancel_sell_mode(string code) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("common"); writer.Key("data"); writer.StartObject(); writer.Key("ctype"); writer.String("auto_cancel_sell_mode"); writer.Key("operate"); writer.Int(3); writer.Key("code"); writer.String(code.c_str()); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_request(std::string(json_content)); //JSON½âÎö rapidjson::GenericDocument> root = JsonUtil::parseUTF16(result); if (root[_T("code")].GetInt() != 0) { throw wstring(root[_T("msg")].GetString()); } else { return root[_T("data")][_T("mode")].GetInt(); } } void NetworkApi::set_auto_cancel_sell_mode(string code, int mode) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("common"); writer.Key("data"); writer.StartObject(); writer.Key("ctype"); writer.String("auto_cancel_sell_mode"); writer.Key("operate"); writer.Int(1); writer.Key("mode"); writer.Int(mode); writer.Key("code"); writer.String(code.c_str()); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_request(std::string(json_content)); //JSON½âÎö rapidjson::GenericDocument> root = JsonUtil::parseUTF16(result); if (root[_T("code")].GetInt() != 0) { throw wstring(root[_T("msg")].GetString()); } } int NetworkApi::get_buy_unique_block_mode() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("common"); writer.Key("data"); writer.StartObject(); writer.Key("ctype"); writer.String("get_buy_block_mode"); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); //JSON½âÎö rapidjson::GenericDocument> root = JsonUtil::parseUTF16(result); if (!root.IsObject()) { throw wstring(L"JSON½âÎö³ö´í"); } if (root[_T("code")].GetInt() != 0) { throw wstring(root[_T("msg")].GetString()); } return root[L"data"][L"unique_block"].GetInt(); } void NetworkApi::set_buy_unique_block_mode(bool enable) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("common"); writer.Key("data"); writer.StartObject(); writer.Key("ctype"); writer.String("set_buy_unique_block_mode"); writer.Key("mode"); writer.Int(enable?1:0); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); //JSON½âÎö rapidjson::GenericDocument> root = JsonUtil::parseUTF16(result); if (!root.IsObject()) { throw wstring(L"JSON½âÎö³ö´í"); } if (root[_T("code")].GetInt() != 0) { throw wstring(root[_T("msg")].GetString()); } } // ¼Ó°×Ãûµ¥ void NetworkApi::add_white(string code) { __request(code, 202); } //¼ÓºÚÃûµ¥ void NetworkApi::add_black(string code) { __request(code, 201); } // ¼ÓÔÝÍ£ÂòÈë void NetworkApi::add_pause_buy(string code) { __request(code, 411); } //¼ÓÏëÂò void NetworkApi::add_want_buy(string code) { __request(code, 401); } void NetworkApi::add_must_buy(std::string code) { __request(code, 421); } void NetworkApi::add_green_buy(std::string code) { __request(code, 441); } // ÒÆ³ý°×Ãûµ¥ void NetworkApi::remove_white(string code) { __request(code, 204); } //ÒÆ³ýºÚÃûµ¥ void NetworkApi::remove_black(string code) { __request(code, 203); } // ÒÆ³ýÔÝÍ£ÂòÈë void NetworkApi::remove_pause_buy(string code) { __request(code, 412); } //ÒÆ³ýÏëÂò void NetworkApi::remove_want_buy(string code) { __request(code, 402); } void NetworkApi::remove_must_buy(std::string code) { __request(code, 422); } void NetworkApi::remove_green_buy(std::string code) { __request(code, 442); } //°×Ãûµ¥Áбí std::list NetworkApi::list_white() { return __request_list(302); } //ºÚÃûµ¥Áбí std::list NetworkApi::list_black() { return __request_list(301); } // ÔÝÍ£ÂòÈëÁбí std::list NetworkApi::list_pause_buy() { return __request_list(413); } //ÏëÂòÁбí std::list NetworkApi::list_want_buy() { return __request_list(403); } std::list NetworkApi::list_must_buy() { return __request_list(423); } std::list NetworkApi::list_green_buy() { return __request_list(443); } // ²éѯÊÇ·ñ¿ÉÒÔ³·µ¥ bool NetworkApi::get_can_cancel_buy(string code) { try { __request(code, 420); return TRUE; } catch (...) { return FALSE; } } // ÂòÈë void NetworkApi::buy(std::string code, int money, int priceType) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("buy"); writer.Key("data"); writer.StartObject(); writer.Key("code"); writer.String(code.c_str()); writer.Key("money"); writer.Int(money); writer.Key("price_type"); writer.Int(priceType); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); //JSON½âÎö rapidjson::GenericDocument> root = JsonUtil::parseUTF16(result); if (!root.IsObject()) { throw wstring(L"JSON½âÎö³ö´í"); } if (root[_T("code")].GetInt() != 0) { throw wstring(root[_T("msg")].GetString()); } } // Âô³ö string NetworkApi::sell(string code, int volume, int price_type, bool forceSell) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("sell"); writer.Key("data"); writer.StartObject(); writer.Key("code"); writer.String(code.c_str()); if (volume >= 0) { writer.Key("volume"); writer.Int(volume); } writer.Key("price_type"); writer.Int(price_type); writer.Key("force"); writer.Int(forceSell ? 1 : 0); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); //JSON½âÎö rapidjson::GenericDocument> root = JsonUtil::parseUTF16(result); if (!root.IsObject()) { throw wstring(L"JSON½âÎö³ö´í"); } if (root[_T("code")].GetInt() != 0) { throw wstring(root[_T("msg")].GetString()); } return result; } string NetworkApi::buy_cb(std::string code, int volume) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("common"); writer.Key("data"); writer.StartObject(); writer.Key("ctype"); writer.String("buy_cb_for_commission"); writer.Key("code"); writer.String(code.c_str()); writer.Key("volume"); writer.Int(volume); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); //JSON½âÎö rapidjson::GenericDocument> root = JsonUtil::parseUTF16(result); if (!root.IsObject()) { throw wstring(L"JSON½âÎö³ö´í"); } if (root[_T("code")].GetInt() != 0) { throw wstring(root[_T("msg")].GetString()); } return result; } string NetworkApi::sell_cb(std::string code, int volume) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("common"); writer.Key("data"); writer.StartObject(); writer.Key("ctype"); writer.String("sell_cb_for_commission"); writer.Key("code"); writer.String(code.c_str()); writer.Key("volume"); writer.Int(volume); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); //JSON½âÎö rapidjson::GenericDocument> root = JsonUtil::parseUTF16(result); if (!root.IsObject()) { throw wstring(L"JSON½âÎö³ö´í"); } if (root[_T("code")].GetInt() != 0) { throw wstring(root[_T("msg")].GetString()); } return result; } string NetworkApi::get_code_position_info(std::string code) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("get_code_position_info"); writer.Key("data"); writer.StartObject(); writer.Key("code"); writer.String(code.c_str()); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); //string result = "{\"code\": 0, \"data\": {\"code\": \"000011\", \"total\": 1200, \"available\": 1200, \"sell_orders\": [], \"sell_rules_count\": 0, \"code_info\": [\"000011\", \"\\u4e0a\\u6d77\\u6d17\\u9738\"], \"desc\": \"\",\"cost_price\":12.00}}"; //JSON½âÎö rapidjson::GenericDocument> root = JsonUtil::parseUTF16(result); if (!root.IsObject()) { throw wstring(L"JSON½âÎö³ö´í"); } if (root[_T("code")].GetInt() != 0) { throw wstring(root[_T("msg")].GetString()); } return result; } string NetworkApi::get_sell_result(int order_ref) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("common"); writer.Key("data"); writer.StartObject(); writer.Key("ctype"); writer.String("get_sell_result"); writer.Key("order_ref"); writer.Int(order_ref); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); //JSON½âÎö rapidjson::GenericDocument> root = JsonUtil::parseUTF16(result); if (!root.IsObject()) { throw wstring(L"JSON½âÎö³ö´í"); } if (root[_T("code")].GetInt() != 0) { throw wstring(root[_T("msg")].GetString()); } return result; } void NetworkApi::sync_trade_data(string type) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("sync_trade_data"); writer.Key("data"); writer.StartObject(); writer.Key("type"); writer.String(type.c_str()); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); } string NetworkApi::get_money() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("money_list"); writer.Key("data"); writer.StartObject(); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); return result; } SubscriptCodesResult NetworkApi::get_huaxin_subscript_codes() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("get_huaxin_subscript_codes"); writer.Key("data"); writer.StartObject(); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); rapidjson::GenericDocument> doc = JsonUtil::parseUTF16(result); std::list fresults; CString updateTime = L""; if (doc.IsObject() && doc[L"code"].GetInt() == 0) { for (int i = 0; i < doc[L"data"][L"list"].GetArray().Size(); i++) { auto arr = doc[L"data"][L"list"].GetArray()[i].GetArray(); CString code = arr[0].GetString(); CString codeName= arr[1].IsNull()?L"δ֪":arr[1].GetString() ; float rate = 0.0f; if (arr.Size() > 2&& arr[2].IsFloat()) { rate = arr[2].GetFloat(); } CodeInfo ci = CodeInfo({ code ,codeName, rate }); fresults.push_back(ci); } updateTime = doc[L"data"][L"update_time"].GetString(); } return SubscriptCodesResult({ fresults ,updateTime }); } SubscriptCodesResult NetworkApi::get_huaxin_position_subscript_codes() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("get_huaxin_position_subscript_codes"); writer.Key("data"); writer.StartObject(); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); rapidjson::GenericDocument> doc = JsonUtil::parseUTF16(result); std::list fresults; CString updateTime = L""; if (doc.IsObject() && doc[L"code"].GetInt() == 0) { for (int i = 0; i < doc[L"data"][L"list"].GetArray().Size(); i++) { auto arr = doc[L"data"][L"list"].GetArray()[i].GetArray(); CString code = arr[0].GetString(); CString codeName = arr[1].IsNull() ? L"δ֪" : arr[1].GetString(); CodeInfo ci = CodeInfo({ code ,codeName }); fresults.push_back(ci); } updateTime = doc[L"data"][L"update_time"].GetString(); } return SubscriptCodesResult({ fresults ,updateTime }); } string NetworkApi::export_l2_data(CString code) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("export_l2_data"); writer.Key("data"); writer.StartObject(); writer.Key("code"); writer.String(StringUtil::cstring2String( code).c_str()); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); return result; } string NetworkApi::every_init() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("everyday_init"); writer.Key("data"); writer.StartObject(); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); return result; } string NetworkApi::huaxin_channel_states() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("trade_server_channels"); writer.Key("data"); writer.StartObject(); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); return result; } string NetworkApi::get_env_status() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("get_env_info"); writer.Key("data"); writer.StartObject(); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); return result; } string NetworkApi::test_redis() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("test_redis"); writer.Key("data"); writer.StartObject(); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); return result; } string NetworkApi::sync_l1_subscript_codes() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("sync_l1_subscript_codes"); writer.Key("data"); writer.StartObject(); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); return result; } string NetworkApi::sync_radical_buy_special_codes() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("common"); writer.Key("data"); writer.StartObject(); writer.Key("ctype"); writer.String("async_radical_buy_special_codes"); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); return result; } string NetworkApi::list_system_log(int start_index, int count) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("get_system_logs"); writer.Key("data"); writer.StartObject(); writer.Key("start_index"); writer.Int(start_index); writer.Key("count"); writer.Int(count); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); return result; } string NetworkApi::get_code_trade_info(CString code) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("get_code_trade_info"); writer.Key("data"); writer.StartObject(); writer.Key("code"); writer.String(StringUtil::cstring2String(code).c_str()); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); return result; return string(); } string NetworkApi::get_l2_listen_active_count() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("get_l2_listen_active_count"); writer.Key("data"); writer.StartObject(); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); return result; return string(); } string NetworkApi::save_running_data() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("save_running_data"); writer.Key("data"); writer.StartObject(); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); return result; } string NetworkApi::list_sell_rules() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("list_sell_rule"); writer.Key("data"); writer.StartObject(); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); return result; } string NetworkApi::add_sell_rule(rapidjson::Document doc) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("add_sell_rule"); writer.Key("data"); writer.StartObject(); for (rapidjson::Value::ConstMemberIterator itr = doc.MemberBegin(); itr != doc.MemberEnd(); itr++) { string key = itr->name.GetString(); writer.Key(key.c_str()); if (itr->value.IsString()) { writer.String(itr->value.GetString()); } else if (itr->value.IsNumber()) { writer.Int(itr->value.GetInt()); } } writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); return result; } string NetworkApi::update_sell_rule(rapidjson::Document doc) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("update_sell_rule"); writer.Key("data"); writer.StartObject(); for (rapidjson::Value::ConstMemberIterator itr = doc.MemberBegin(); itr != doc.MemberEnd(); itr++) { string key = itr->name.GetString(); writer.Key(key.c_str()); if (itr->value.IsString()) { writer.String(itr->value.GetString()); } else if (itr->value.IsNumber()) { writer.Int(itr->value.GetInt()); } } writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); return result; } string NetworkApi::del_sell_rule(CString id) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("del_sell_rule"); writer.Key("data"); writer.StartObject(); writer.Key("id"); writer.String(StringUtil::cstring2String( id).c_str()); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); return result; } string NetworkApi::get_all_positions() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("common"); writer.Key("data"); writer.StartObject(); writer.Key("ctype"); writer.String("get_positions"); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); //string result = StringUtil::cstring2String(L"{\"code\":0,\"data\":[{\"code\":\"002729\",\"code_name\":\"ºÃÀû¿Æ¼¼\"}, {\"code\":\"300564\",\"code_name\":\"Öþ²©Éè¼Æ\"}]}"); return result; } string NetworkApi::get_buy1_info(string code) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("get_buy1_info"); writer.Key("data"); writer.StartObject(); writer.Key("code"); writer.String(code.c_str()); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); return result; } void NetworkApi::set_buy_money_and_count(int normalCount, string normalMoneyJson, int radicalCount, string radicalMoneyJson, int default_buy_money) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("common"); writer.Key("data"); writer.StartObject(); writer.Key("ctype"); writer.String("set_buy_money_count_setting"); writer.Key("default_buy_money"); writer.Int(default_buy_money); writer.Key("normal"); writer.StartArray(); writer.Int(normalCount); writer.String(normalMoneyJson.c_str()); writer.EndArray(); writer.Key("radical"); writer.StartArray(); writer.Int(radicalCount); writer.String(radicalMoneyJson.c_str()); writer.EndArray(); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_request(std::string(json_content)); auto root = JsonUtil::parseUTF16(result); if (root.IsObject()) { if (root[L"code"] != 0) { throw wstring(root[L"msg"].GetString()); } } else { throw wstring(L"ÍøÂçÇëÇó´íÎó"); } } string NetworkApi::get_buy_money_and_count() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("common"); writer.Key("data"); writer.StartObject(); writer.Key("ctype"); writer.String("get_buy_money_count_setting"); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_request(std::string(json_content)); return result; } void NetworkApi::set_radical_buy_block_count(string data) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("common"); writer.Key("data"); writer.StartObject(); writer.Key("ctype"); writer.String("set_radical_buy_block_count_setting"); writer.Key("data"); writer.String(data.c_str()); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_request(json_content); auto root = JsonUtil::parseUTF16(result); if (root.IsObject()) { if (root[L"code"] != 0) { throw wstring(root[L"msg"].GetString()); } } else { throw wstring(L"ÍøÂçÇëÇó´íÎó"); } } string NetworkApi::get_radical_buy_block_count() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("common"); writer.Key("data"); writer.StartObject(); writer.Key("ctype"); writer.String("get_radical_buy_block_count_setting"); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_request(std::string(json_content)); return result; } int NetworkApi::get_per_code_buy_money() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("common"); writer.Key("data"); writer.StartObject(); writer.Key("ctype"); writer.String("get_per_code_buy_money"); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_request(std::string(json_content)); auto root=JsonUtil::parseUTF16(result); if (root.IsObject()) { if (root[L"code"].GetInt() == 0) { return root[L"data"][L"money"].GetInt(); } else { throw wstring(root[L"msg"].GetString()); } } else { throw wstring(L"ÍøÂçÇëÇó³ö´í"); } } string NetworkApi::get_l2_deal_price(string code) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("common"); writer.Key("data"); writer.StartObject(); writer.Key("ctype"); writer.String("get_l2_deal_price"); writer.Key("code"); writer.String(code.c_str()); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_request(std::string(json_content)); return result; } string NetworkApi::repaire_task() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("common"); writer.Key("data"); writer.StartObject(); writer.Key("ctype"); writer.String("repaire_task"); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_request(std::string(json_content)); return result; } string NetworkApi::sync_zylt_volume() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("common"); writer.Key("data"); writer.StartObject(); writer.Key("ctype"); writer.String("refresh_zylt_volume"); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_request(std::string(json_content)); return result; } string NetworkApi::get_today_updated_zylt_volume_count() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("common"); writer.Key("data"); writer.StartObject(); writer.Key("ctype"); writer.String("get_today_updated_zylt_volume_count"); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_request(std::string(json_content)); return result; } string NetworkApi::sync_history_k_bars() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("common"); writer.Key("data"); writer.StartObject(); writer.Key("ctype"); writer.String("update_history_k_bars"); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_request(std::string(json_content)); return result; } string NetworkApi::get_today_updated_history_k_bars_count() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("common"); writer.Key("data"); writer.StartObject(); writer.Key("ctype"); writer.String("get_history_bars_codes_count"); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_request(std::string(json_content)); return result; } string NetworkApi::get_place_order_settings() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("common"); writer.Key("data"); writer.StartObject(); writer.Key("ctype"); writer.String("get_place_order_settings"); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_request(std::string(json_content)); return result; } string NetworkApi::set_place_order_settings(string radical_buy_data) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("common"); writer.Key("data"); writer.StartObject(); writer.Key("ctype"); writer.String("set_place_order_settings"); writer.Key("radical_buy"); writer.String(radical_buy_data.c_str()); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_request(std::string(json_content)); return result; } string NetworkApi::get_buy_open_limit_up_codes() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("common"); writer.Key("data"); writer.StartObject(); writer.Key("ctype"); writer.String("get_buy_open_limit_up_codes"); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_request(std::string(json_content)); return result; } string NetworkApi::set_buy_open_limit_up_codes(list codes) { rapidjson::StringBuffer codesbuf; rapidjson::PrettyWriter writercodes(codesbuf); writercodes.StartArray(); for (list::iterator e = codes.begin(); e != codes.end(); ++e) { writercodes.String((*e).c_str()); } writercodes.EndArray(); const char* codes_json_content = codesbuf.GetString(); rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("common"); writer.Key("data"); writer.StartObject(); writer.Key("ctype"); writer.String("set_buy_open_limit_up_codes"); writer.Key("codes"); writer.String(codes_json_content); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_request(std::string(json_content)); return result; } string NetworkApi::list_delegate_records(CString updateTime,bool canCancel) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("delegate_list"); writer.Key("data"); writer.StartObject(); writer.Key("update_time"); writer.String(StringUtil::cstring2String (updateTime).c_str()); writer.Key("can_cancel"); writer.Int(canCancel ? 1 : 0); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); return result; } string NetworkApi::list_deal_records() { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("deal_list"); writer.Key("data"); writer.StartObject(); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); return result; } void NetworkApi::cancel_order(CString code, CString orderSysID,CString accountID) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("cancel_order"); writer.Key("data"); writer.StartObject(); writer.Key("code"); writer.String(StringUtil::cstring2String(code).c_str()); writer.Key("orderSysID"); writer.String(StringUtil::cstring2String(orderSysID).c_str()); writer.Key("accountId"); writer.String(StringUtil::cstring2String(accountID).c_str()); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); rapidjson::GenericDocument> root = JsonUtil::parseUTF16(result); if (root.IsObject() ) { if (root[L"code"].GetInt() == 0) { return ; } else { throw CString(root[L"msg"].GetString()); } } else { throw CString(L"json½âÎö³ö´í"); } return ; } // ³·µ¥ void NetworkApi::cancel_buy(CString code) { return cancel_order(code, L"",L""); } string NetworkApi::get_same_block_limit_up_codes_count(list codes) { rapidjson::StringBuffer codesbuf; rapidjson::PrettyWriter writercodes(codesbuf); writercodes.StartArray(); for (list::iterator e = codes.begin(); e != codes.end(); ++e) { writercodes.String((*e).c_str()); } writercodes.EndArray(); const char* codes_json_content = codesbuf.GetString(); rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("common"); writer.Key("data"); writer.StartObject(); writer.Key("ctype"); writer.String("get_same_block_limit_up_codes_count"); writer.Key("codes"); writer.String(codes_json_content); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); //string result = StringUtil::cstring2String(L"{\"code\":0,\"data\":[{\"code\":\"002729\",\"code_name\":\"ºÃÀû¿Æ¼¼\"}, {\"code\":\"300564\",\"code_name\":\"Öþ²©Éè¼Æ\"}]}"); return result; } string NetworkApi::get_code_deal_queue(string code, int min_money) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("common"); writer.Key("data"); writer.StartObject(); writer.Key("ctype"); writer.String("get_deal_queue"); writer.Key("code"); writer.String(code.c_str()); writer.Key("min_money"); writer.Int(min_money); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); return result; } string NetworkApi::test_place_order(string code) { rapidjson::StringBuffer buf; rapidjson::PrettyWriter writer(buf); writer.StartObject(); writer.Key("type"); writer.String("common"); writer.Key("data"); writer.StartObject(); writer.Key("ctype"); writer.String("test_place_order"); writer.Key("code"); writer.String(code.c_str()); writer.EndObject(); writer.EndObject(); const char* json_content = buf.GetString(); string result = base_trade_request(std::string(json_content)); return result; }