|
#include "common/pch.h"
|
#include<codecvt>
|
#include<list>
|
#include<string>
|
#include"StringUtil.h"
|
#include"NetworkApi.h"
|
#include "JsonUtil.h"
|
#include <chrono>
|
#include <ctime>
|
#include <random>
|
#include "md5.h"
|
#include <sstream>
|
#include <iostream>
|
#include <iomanip>
|
|
|
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<int> 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<string> 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<rapidjson::StringBuffer> 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<string>::iterator el = strList.begin(); el != strList.end(); el++) {
|
src.append(*el);
|
index++;
|
if (index != strList.size()) {
|
src.append("&");
|
}
|
}
|
//MD5
|
//cout << "¼ÓÃÜǰ×Ö·û´®£º" <<src << endl;
|
string md5 = MD5(src).toStr();
|
return md5;
|
}
|
|
|
//ÍøÂçÇëÇó
|
std::string NetworkApi::base_request(std::string data) {
|
rapidjson::Document document;
|
document.Parse(data.c_str());
|
string requestIdStr =(document["type"].IsInt()? std::to_string(document["type"].GetInt()) : 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<rapidjson::StringBuffer> 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(_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<rapidjson::StringBuffer> 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 CString(L"ÍøÂçÇëÇó³ö´í");
|
}
|
}
|
|
void NetworkApi::__request(std::string code, int type) {
|
rapidjson::StringBuffer buf;
|
rapidjson::PrettyWriter<rapidjson::StringBuffer> 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<rapidjson::UTF16<>> root = JsonUtil::parseUTF16(result);
|
if (root[_T("code")].GetInt() != 0) {
|
throw wstring(root[_T("msg")].GetString());
|
}
|
|
}
|
|
std::list<wstring> NetworkApi::__request_list(int type) {
|
rapidjson::StringBuffer buf;
|
rapidjson::PrettyWriter<rapidjson::StringBuffer> 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<rapidjson::UTF16<>> root;
|
root.Parse(wresult.c_str());
|
std::list<wstring> 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<rapidjson::StringBuffer> 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<rapidjson::UTF16<>> 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 fresult;
|
}
|
}
|
}
|
throw wstring(L"ÉÐδ»ñÈ¡µ½ÄÚÈÝ");
|
}
|
|
// ÉèÖý»Ò×״̬
|
void NetworkApi::set_buy_state(bool is_open) {
|
rapidjson::StringBuffer buf;
|
rapidjson::PrettyWriter<rapidjson::StringBuffer> 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<rapidjson::StringBuffer> 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<rapidjson::UTF16<>> 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<rapidjson::StringBuffer> 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<rapidjson::UTF16<>> 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<rapidjson::StringBuffer> 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<rapidjson::UTF16<>> root = JsonUtil::parseUTF16(result);
|
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::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);
|
}
|
|
|
//°×Ãûµ¥Áбí
|
std::list<wstring> NetworkApi::list_white() {
|
return __request_list(302);
|
}
|
//ºÚÃûµ¥Áбí
|
std::list<wstring> NetworkApi::list_black() {
|
return __request_list(301);
|
}
|
// ÔÝÍ£ÂòÈëÁбí
|
std::list<wstring> NetworkApi::list_pause_buy() {
|
return __request_list(413);
|
}
|
//ÏëÂòÁбí
|
std::list<wstring> NetworkApi::list_want_buy() {
|
return __request_list(403);
|
}
|
|
|
// ²éѯÊÇ·ñ¿ÉÒÔ³·µ¥
|
bool NetworkApi::get_can_cancel_buy(string code) {
|
try {
|
__request(code, 420);
|
return TRUE;
|
}
|
catch (...) {
|
return FALSE;
|
}
|
}
|
|
|
// ÂòÈë
|
void NetworkApi::buy(std::string code, int volume, string price)
|
{
|
rapidjson::StringBuffer buf;
|
rapidjson::PrettyWriter<rapidjson::StringBuffer> 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("volume");
|
writer.Int(volume);
|
writer.Key("price");
|
writer.String(price.c_str());
|
writer.EndObject();
|
writer.EndObject();
|
const char* json_content = buf.GetString();
|
string result = base_trade_request(std::string(json_content));
|
//JSON½âÎö
|
rapidjson::GenericDocument<rapidjson::UTF16<>> 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<rapidjson::StringBuffer> writer(buf);
|
writer.StartObject();
|
writer.Key("type");
|
writer.String("sell");
|
writer.Key("data");
|
writer.StartObject();
|
writer.Key("code");
|
writer.String(code.c_str());
|
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<rapidjson::UTF16<>> 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<rapidjson::StringBuffer> 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));
|
//JSON½âÎö
|
rapidjson::GenericDocument<rapidjson::UTF16<>> 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<rapidjson::StringBuffer> 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<rapidjson::UTF16<>> 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<rapidjson::StringBuffer> 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<rapidjson::StringBuffer> 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<rapidjson::StringBuffer> 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<rapidjson::UTF16<>> doc = JsonUtil::parseUTF16(result);
|
std::list<CodeInfo> 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<rapidjson::StringBuffer> 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<rapidjson::StringBuffer> 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<rapidjson::StringBuffer> 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<rapidjson::StringBuffer> 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<rapidjson::StringBuffer> 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<rapidjson::StringBuffer> 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::list_system_log(int start_index, int count)
|
{
|
rapidjson::StringBuffer buf;
|
rapidjson::PrettyWriter<rapidjson::StringBuffer> 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<rapidjson::StringBuffer> 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<rapidjson::StringBuffer> 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<rapidjson::StringBuffer> 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<rapidjson::StringBuffer> 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<rapidjson::StringBuffer> 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::del_sell_rule(CString id)
|
{
|
rapidjson::StringBuffer buf;
|
rapidjson::PrettyWriter<rapidjson::StringBuffer> 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::list_delegate_records(CString updateTime,bool canCancel)
|
{
|
rapidjson::StringBuffer buf;
|
rapidjson::PrettyWriter<rapidjson::StringBuffer> 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<rapidjson::StringBuffer> 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<rapidjson::StringBuffer> 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<rapidjson::UTF16<>> 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"");
|
}
|