int MdApiImpl::ReqUserLogin(CThostFtdcReqUserLoginField *pReqUserLoginField, int nRequestID) { static BYTE bLoginPkt[FTD_HDRLEN] = { FTDTypeFTDC,0,0,0xea,1,0,8,CHAIN_LAST,0,0,0,0,0x30,0,0,0,0,0,0,3,0,0xd4,0,0,0,0,0x10,2,0,0xbc}; DWORD iLen = FTD_HDRLEN+sizeof(CThostFtdcReqUserLoginField)+sizeof(bMdQuick); m_bPktSend.resize(iLen); *(DWORD*)(bLoginPkt+0x16) = htonl(nRequestID); GetToday(pReqUserLoginField->TradingDay,9); //strcpy(pReqUserLoginField->BrokerID, m_sBkrId); if (!strlen(pReqUserLoginField->UserProductInfo)) { StringCbCopyA(pReqUserLoginField->UserProductInfo,11,PROD_INFO); } if (!strlen(pReqUserLoginField->InterfaceProductInfo)) { StringCbCopyA(pReqUserLoginField->InterfaceProductInfo,11,API_INFO); } if (!strlen(pReqUserLoginField->ProtocolInfo)) { StringCbCopyA(pReqUserLoginField->ProtocolInfo,11,PROT_INFO); } StringCbCopyA(pReqUserLoginField->MacAddress,21,m_sMac); memcpy(&m_bPktSend[0],bLoginPkt,FTD_HDRLEN); memcpy(&m_bPktSend[FTD_HDRLEN],pReqUserLoginField,sizeof(CThostFtdcReqUserLoginField)); memcpy(&m_bPktSend[FTD_HDRLEN+sizeof(CThostFtdcReqUserLoginField)],bMdQuick,sizeof(bMdQuick)); return SendPkt(&m_bPktSend[0],iLen); }
int MdApiImpl::UnSubscribeMarketData(char *ppInstrumentID[], int nCount) { static BYTE bUnSubMdPkt[FTD_HDRLEN-4] = { FTDTypeFTDC,0,0,0x3d,1,0,8,CHAIN_LAST,0,0,0,0,0x44,3,0,0,0,0,0,1/*nCount*/,0,0x27,0,0,0,0/*,0x24,0x41,0,0x1f*/}; int iOne = sizeof(TThostFtdcInstrumentIDType)+sizeof(bSubMdSign); DWORD iLen = FTD_HDRLEN-4+ nCount*iOne; m_bPktSend.resize(iLen); *(USHORT*)(bSubMdSign+2) = htons(sizeof(TThostFtdcInstrumentIDType)); *(USHORT*)(bUnSubMdPkt+2) = htons(iLen-4); //分包????? *(USHORT*)(bUnSubMdPkt+0x12) = htons(nCount); *(USHORT*)(bUnSubMdPkt+0x14) = htons(nCount*iOne); memcpy(&m_bPktSend[0],bUnSubMdPkt,FTD_HDRLEN-4); ONEPKT pkt; ZeroMemory(&pkt, sizeof(pkt)); memcpy(pkt.bSign,bSubMdSign,4); for (int i=0; i<nCount; i++) { StringCbCopyA(pkt.sInst,sizeof(TThostFtdcInstrumentIDType),ppInstrumentID[i]); memcpy(&m_bPktSend[FTD_HDRLEN-4+iOne*i],&pkt,iOne); } return SendPkt(&m_bPktSend[0],iLen); }
bool CMOOSCommObject::SendMsg(XPCTcpSocket *pSocket,CMOOSMsg &Msg) { MOOSMSG_LIST MsgList; MsgList.push_front(Msg); CMOOSCommPkt Pkt; Pkt.Serialize(MsgList,true); return SendPkt(pSocket,Pkt); }
void BaseConn::OnConfirm() { m_open = true; if (!m_wait_pkt_list.empty()) { for (auto it = m_wait_pkt_list.begin(); it != m_wait_pkt_list.end(); ++it) { PktBase* pkt = *it; SendPkt(pkt); delete pkt; } m_wait_pkt_list.clear(); } }
int MdApiImpl::SendHBeatPkt() { return SendPkt(bHBeatPkt,6); }
int MdApiImpl::SendPrePkt() { return SendPkt(bUnkPkt,10); }
void NbClientConn::HandlePkt(PktBase* pPkt) { // continuous send packet to server when receive a packet PktHeartBeat hb_pkt; SendPkt(&hb_pkt); }