#include "stdafx.h"#include "ProtoRTData.h"#include "CppJsonConv.h"#include "../JsonCpp/json_op.h"#ifdef _DEBUG#define new DEBUG_NEW#endifCProtoRTData::CProtoRTData(){m_pReqData = NULL;m_pAckData = NULL;}CProtoRTData::~CProtoRTData(){}bool CProtoRTData::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 CProtoRTData::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 CProtoRTData::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 CProtoRTData::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 CProtoRTData::SetProtoData_Req(ProtoReqDataType *pData){m_pReqData = pData;}void CProtoRTData::SetProtoData_Ack(ProtoAckDataType *pData){m_pAckData = pData;}//tomodify 3(数组等复杂结构或单层的结构体)bool CProtoRTData::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 CProtoRTData::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 &= ParseRTDataArr(jsnBody, data.body);}return bSuc;}//tomodify 5(数组等复杂结构或单层的结构体)bool CProtoRTData::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 CProtoRTData::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 &= MakeRTDataArr(jsnBody, data.body);}return bSuc;}//tomodify 7void CProtoRTData::GetProtoBodyField_Req(VT_PROTO_FIELD &vtField, const ProtoReqBodyType &reqData){static BOOL arOptional[] = {FALSE, FALSE,};static EProtoFildType arFieldType[] = {ProtoFild_Int32, ProtoFild_StringA,};static LPCSTR arFieldKey[] = {"Market", "StockCode",};ProtoReqBodyType &body = const_cast<ProtoReqBodyType &>(reqData);void *arPtr[] = {&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);}}//tomodify 8void CProtoRTData::GetProtoBodyField_Ack(VT_PROTO_FIELD &vtField, const ProtoAckBodyType &ackData){static BOOL arOptional[] = {FALSE, FALSE, FALSE,};static EProtoFildType arFieldType[] = {ProtoFild_Int32, ProtoFild_Int32, ProtoFild_StringA};static LPCSTR arFieldKey[] = {"Num", "Market", "StockCode",};ProtoAckBodyType &body = const_cast<ProtoAckBodyType &>(ackData);void *arPtr[] = {&body.nNum, &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 CProtoRTData::ParseRTDataArr(const Json::Value &jsnRetData, ProtoAckBodyType &data){CHECK_RET(warn_if_prop_not_set(jsnRetData, "RTDataArr"), false);const Json::Value &jsnRTDataArr = jsnRetData["RTDataArr"];CHECK_RET(jsnRTDataArr.isArray(), false);bool bSuc = true;int nArrSize = jsnRTDataArr.size();for ( int n = 0; n < nArrSize; n++ ){RTDataAckItem item;VT_PROTO_FIELD vtField;GetRTDataArrField(vtField, item);const Json::Value jsnItem = jsnRTDataArr[n];CHECK_OP(!jsnItem.isNull(), continue);bSuc = CProtoParseBase::ParseProtoFields(jsnItem, vtField);CHECK_OP(bSuc, break);data.vtRTData.push_back(item);}return bSuc;}bool CProtoRTData::MakeRTDataArr(Json::Value &jsnRetData, const ProtoAckBodyType &data){CHECK_RET(warn_if_prop_exists(jsnRetData, "RTDataArr"), false);Json::Value &jsnRTDataArr = jsnRetData["RTDataArr"];bool bSuc = true;for ( int n = 0; n < (int)data.vtRTData.size(); n++ ){const RTDataAckItem &item = data.vtRTData[n];VT_PROTO_FIELD vtField;GetRTDataArrField(vtField, item);Json::Value &jsnItem = jsnRTDataArr[n];bSuc = CProtoParseBase::MakeProtoFields(jsnItem, vtField);CHECK_OP(bSuc, break);}return bSuc;}void CProtoRTData::GetRTDataArrField(VT_PROTO_FIELD &vtField, const RTDataAckItem &ackItem){static BOOL arOptional[] = {FALSE, FALSE, FALSE,FALSE, FALSE, FALSE,FALSE, FALSE,};static EProtoFildType arFieldType[] = {ProtoFild_Int32, ProtoFild_StringW, ProtoFild_Int32,ProtoFild_Int32, ProtoFild_Int32, ProtoFild_Int32,ProtoFild_Int64, ProtoFild_Int64,};static LPCSTR arFieldKey[] = {"DataStatus", "Time", "OpenedMins","CurPrice", "LastClose", "AvgPrice","Volume", "Turnover",};RTDataAckItem &item = const_cast<RTDataAckItem &>(ackItem);void *arPtr[] = {&item.nDataStatus, &item.strTime, &item.dwOpenedMins,&item.nCurPrice, &item.nLastClosePrice, &item.nAvgPrice,&item.ddwTDVolume, &item.ddwTDValue,};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);}}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。