代码拉取完成,页面将自动刷新
#include "stdafx.h"
#include "ProtoPushKLData.h"
#include "CppJsonConv.h"
#include "../JsonCpp/json_op.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
CProtoPushKLData::CProtoPushKLData()
{
m_pReqData = NULL;
m_pAckData = NULL;
}
CProtoPushKLData::~CProtoPushKLData()
{
}
bool CProtoPushKLData::ParseJson_Req(const Json::Value &jsnVal)
{
CHECK_RET(m_pReqData != NULL, false);
bool bSuc = true;
do
{
bSuc &= ParseProtoHead_Req(jsnVal, m_pReqData->head);
CHECK_OP(bSuc, break);
bSuc &= ParseProtoBody_Req(jsnVal, *m_pReqData);
CHECK_OP(bSuc, break);
} while (0);
return bSuc;
}
bool CProtoPushKLData::ParseJson_Ack(const Json::Value &jsnVal)
{
CHECK_RET(m_pAckData != NULL, false);
bool bSuc = true;
do
{
bSuc &= ParseProtoHead_Ack(jsnVal, m_pAckData->head);
CHECK_OP(bSuc, break);
if ( m_pAckData->head.ddwErrCode == PROTO_ERR_NO_ERROR )
{
bSuc &= ParseProtoBody_Ack(jsnVal, *m_pAckData);
CHECK_OP(bSuc, break);
}
} while (0);
return bSuc;
}
bool CProtoPushKLData::MakeJson_Req(Json::Value &jsnVal)
{
CHECK_RET(m_pReqData != NULL, false);
bool bSuc = true;
do
{
bSuc &= MakeProtoHead_Req(jsnVal, m_pReqData->head);
CHECK_OP(bSuc, break);
bSuc &= MakeProtoBody_Req(jsnVal, *m_pReqData);
CHECK_OP(bSuc, break);
} while (0);
return bSuc;
}
bool CProtoPushKLData::MakeJson_Ack(Json::Value &jsnVal)
{
CHECK_RET(m_pAckData != NULL, false);
bool bSuc = true;
do
{
bSuc &= MakeProtoHead_Ack(jsnVal, m_pAckData->head);
CHECK_OP(bSuc, break);
if ( m_pAckData->head.ddwErrCode == PROTO_ERR_NO_ERROR )
{
bSuc &= MakeProtoBody_Ack(jsnVal, *m_pAckData);
CHECK_OP(bSuc, break);
}
} while (0);
return bSuc;
}
void CProtoPushKLData::SetProtoData_Req(ProtoReqDataType *pData)
{
m_pReqData = pData;
}
void CProtoPushKLData::SetProtoData_Ack(ProtoAckDataType *pData)
{
m_pAckData = pData;
}
//tomodify 3(数组等复杂结构或单层的结构体)
bool CProtoPushKLData::ParseProtoBody_Req(const Json::Value &jsnVal, ProtoReqDataType &data)
{
if ( !warn_if_prop_not_set(jsnVal, KEY_REQ_PARAM) )
return true;
VT_PROTO_FIELD vtField;
GetProtoBodyField_Req(vtField, data.body);
const Json::Value &jsnBody = jsnVal[KEY_REQ_PARAM];
bool bSuc = CProtoParseBase::ParseProtoFields(jsnBody, vtField);
CHECK_OP(bSuc, NOOP);
return true;
}
//tomodify 4(数组等复杂结构或单层的结构体)
bool CProtoPushKLData::ParseProtoBody_Ack(const Json::Value &jsnVal, ProtoAckDataType &data)
{
CHECK_RET(warn_if_prop_not_set(jsnVal, KEY_ACK_DATA), false);
VT_PROTO_FIELD vtField;
GetProtoBodyField_Ack(vtField, data.body);
const Json::Value &jsnBody = jsnVal[KEY_ACK_DATA];
bool bSuc = CProtoParseBase::ParseProtoFields(jsnBody, vtField);
CHECK_OP(bSuc, NOOP);
if ( bSuc )
{
bSuc &= ParseKLDataArr(jsnBody, data.body);
}
return bSuc;
}
//tomodify 5(数组等复杂结构或单层的结构体)
bool CProtoPushKLData::MakeProtoBody_Req(Json::Value &jsnVal, const ProtoReqDataType &data)
{
CHECK_RET(warn_if_prop_exists(jsnVal, KEY_REQ_PARAM), false);
VT_PROTO_FIELD vtField;
GetProtoBodyField_Req(vtField, data.body);
Json::Value &jsnBody = jsnVal[KEY_REQ_PARAM];
bool bSuc = CProtoParseBase::MakeProtoFields(jsnBody, vtField);
CHECK_OP(bSuc, NOOP);
return bSuc;
}
//tomodify 6(数组等复杂结构或单层的结构体)
bool CProtoPushKLData::MakeProtoBody_Ack(Json::Value &jsnVal, const ProtoAckDataType &data)
{
CHECK_RET(warn_if_prop_exists(jsnVal, KEY_ACK_DATA), false);
VT_PROTO_FIELD vtField;
GetProtoBodyField_Ack(vtField, data.body);
Json::Value &jsnBody = jsnVal[KEY_ACK_DATA];
bool bSuc = CProtoParseBase::MakeProtoFields(jsnBody, vtField);
CHECK_OP(bSuc, NOOP);
if ( bSuc )
{
bSuc &= MakeKLDataArr(jsnBody, data.body);
}
return bSuc;
}
//tomodify 7
void CProtoPushKLData::GetProtoBodyField_Req(VT_PROTO_FIELD &vtField, const ProtoReqBodyType &reqData)
{
static BOOL arOptional[] = {
FALSE, FALSE, FALSE,
FALSE, FALSE,
};
static EProtoFildType arFieldType[] = {
ProtoFild_Int32, ProtoFild_Int32, ProtoFild_Int32,
ProtoFild_Int32, ProtoFild_StringA,
};
static LPCSTR arFieldKey[] = {
"RehabType", "KLType", "Market",
"Num", "StockCode",
};
ProtoReqBodyType &body = const_cast<ProtoReqBodyType &>(reqData);
void *arPtr[] = {
&body.nRehabType, &body.nKLType, &body.nStockMarket,
&body.nNum, &body.strStockCode,
};
CHECK_OP(_countof(arOptional) == _countof(arFieldType), NOOP);
CHECK_OP(_countof(arOptional) == _countof(arFieldKey), NOOP);
CHECK_OP(_countof(arOptional) == _countof(arPtr), NOOP);
vtField.clear();
PROTO_FIELD field;
for ( int n = 0; n < _countof(arOptional); n++ )
{
field.bOptional = arOptional[n];
field.eFieldType = arFieldType[n];
field.strFieldKey = arFieldKey[n];
switch (field.eFieldType)
{
case ProtoFild_Int32:
field.pInt32 = (int*)arPtr[n];
break;
case ProtoFild_Int64:
field.pInt64 = (INT64*)arPtr[n];
break;
case ProtoFild_StringA:
field.pStrA = (std::string*)arPtr[n];
break;
case ProtoFild_StringW:
field.pStrW = (std::wstring*)arPtr[n];
break;
default:
CHECK_OP(FALSE, NOOP);
break;
}
vtField.push_back(field);
}
}
//tomodify 8
void CProtoPushKLData::GetProtoBodyField_Ack(VT_PROTO_FIELD &vtField, const ProtoAckBodyType &ackData)
{
static BOOL arOptional[] = {
FALSE, FALSE, FALSE,
FALSE,
};
static EProtoFildType arFieldType[] = {
ProtoFild_Int32, ProtoFild_Int32, ProtoFild_Int32,
ProtoFild_StringA
};
static LPCSTR arFieldKey[] = {
"RehabType", "KLType", "Market",
"StockCode",
};
ProtoAckBodyType &body = const_cast<ProtoAckBodyType &>(ackData);
void *arPtr[] = {
&body.nRehabType, &body.nKLType, &body.nStockMarket,
&body.strStockCode,
};
CHECK_OP(_countof(arOptional) == _countof(arFieldType), NOOP);
CHECK_OP(_countof(arOptional) == _countof(arFieldKey), NOOP);
CHECK_OP(_countof(arOptional) == _countof(arPtr), NOOP);
vtField.clear();
PROTO_FIELD field;
for ( int n = 0; n < _countof(arOptional); n++ )
{
field.bOptional = arOptional[n];
field.eFieldType = arFieldType[n];
field.strFieldKey = arFieldKey[n];
switch (field.eFieldType)
{
case ProtoFild_Int32:
field.pInt32 = (int*)arPtr[n];
break;
case ProtoFild_Int64:
field.pInt64 = (INT64*)arPtr[n];
break;
case ProtoFild_StringA:
field.pStrA = (std::string*)arPtr[n];
break;
case ProtoFild_StringW:
field.pStrW = (std::wstring*)arPtr[n];
break;
default:
CHECK_OP(FALSE, NOOP);
break;
}
vtField.push_back(field);
}
}
bool CProtoPushKLData::ParseKLDataArr(const Json::Value &jsnRetData, ProtoAckBodyType &data)
{
CHECK_RET(warn_if_prop_not_set(jsnRetData, "KLDataArr"), false);
const Json::Value &jsnKLDataArr = jsnRetData["KLDataArr"];
CHECK_RET(jsnKLDataArr.isArray(), false);
bool bSuc = true;
int nArrSize = jsnKLDataArr.size();
for ( int n = 0; n < nArrSize; n++ )
{
PushKLDataAckItem item;
VT_PROTO_FIELD vtField;
GetKLDataArrField(vtField, item);
const Json::Value jsnItem = jsnKLDataArr[n];
CHECK_OP(!jsnItem.isNull(), continue);
bSuc = CProtoParseBase::ParseProtoFields(jsnItem, vtField);
CHECK_OP(bSuc, break);
data.vtKLData.push_back(item);
}
return bSuc;
}
bool CProtoPushKLData::MakeKLDataArr(Json::Value &jsnRetData, const ProtoAckBodyType &data)
{
CHECK_RET(warn_if_prop_exists(jsnRetData, "KLDataArr"), false);
Json::Value &jsnKLDataArr = jsnRetData["KLDataArr"];
bool bSuc = true;
for ( int n = 0; n < (int)data.vtKLData.size(); n++ )
{
const PushKLDataAckItem &item = data.vtKLData[n];
VT_PROTO_FIELD vtField;
GetKLDataArrField(vtField, item);
Json::Value &jsnItem = jsnKLDataArr[n];
bSuc = CProtoParseBase::MakeProtoFields(jsnItem, vtField);
CHECK_OP(bSuc, break);
}
return bSuc;
}
void CProtoPushKLData::GetKLDataArrField(VT_PROTO_FIELD &vtField, const PushKLDataAckItem &ackItem)
{
static BOOL arOptional[] = {
FALSE, FALSE,
FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE,
FALSE,
};
static EProtoFildType arFieldType[] = {
ProtoFild_StringW, ProtoFild_Int64,
ProtoFild_Int64, ProtoFild_Int64, ProtoFild_Int64,
ProtoFild_Int32, ProtoFild_Int32, ProtoFild_Int64,
ProtoFild_Int64,
};
static LPCSTR arFieldKey[] = {
"Time", "Open",
"Close", "High", "Low",
"PERatio", "TurnoverRate", "Volume",
"Turnover"
};
PushKLDataAckItem &item = const_cast<PushKLDataAckItem &>(ackItem);
void *arPtr[] = {
&item.strTime, &item.nOpenPrice,
&item.nClosePrice, &item.nHighestPrice, &item.nLowestPrice,
&item.nPERatio, &item.nTurnoverRate, &item.ddwTDVol,
&item.ddwTDVal,
};
CHECK_OP(_countof(arOptional) == _countof(arFieldType), NOOP);
CHECK_OP(_countof(arOptional) == _countof(arFieldKey), NOOP);
CHECK_OP(_countof(arOptional) == _countof(arPtr), NOOP);
vtField.clear();
PROTO_FIELD field;
for ( int n = 0; n < _countof(arOptional); n++ )
{
field.bOptional = arOptional[n];
field.eFieldType = arFieldType[n];
field.strFieldKey = arFieldKey[n];
switch (field.eFieldType)
{
case ProtoFild_Int32:
field.pInt32 = (int*)arPtr[n];
break;
case ProtoFild_Int64:
field.pInt64 = (INT64*)arPtr[n];
break;
case ProtoFild_StringA:
field.pStrA = (std::string*)arPtr[n];
break;
case ProtoFild_StringW:
field.pStrW = (std::wstring*)arPtr[n];
break;
default:
CHECK_OP(FALSE, NOOP);
break;
}
vtField.push_back(field);
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。