int CTraderApi::_Init() { if (m_pApi == nullptr) { m_pApi = CTdxApi::CreateApi(); m_pApi->RegisterSpi(this); } Error_STRUCT* pErr = nullptr; m_pApi->LoadScript(m_ServerInfo.Address, true, false); m_pApi->Init(m_ServerInfo.ExtInfoChar128, &pErr); if (pErr) { RspUserLoginField* pField = (RspUserLoginField*)m_msgQueue->new_block(sizeof(RspUserLoginField)); pField->RawErrorID = pErr->ErrCode; strcpy(pField->Text, pErr->ErrInfo); m_msgQueue->Input_NoCopy(ResponseType::ResponseType_OnConnectionStatus, m_msgQueue, m_pClass, ConnectionStatus::ConnectionStatus_Disconnected, 0, pField, sizeof(RspUserLoginField), nullptr, 0, nullptr, 0); } else { m_msgQueue->Input_NoCopy(ResponseType::ResponseType_OnConnectionStatus, m_msgQueue, m_pClass, ConnectionStatus::ConnectionStatus_Initialized, 0, nullptr, 0, nullptr, 0, nullptr, 0); ReqUserLogin(); } DeleteError(pErr); return 0; }
void DeleteError(Error * todelete) { if(todelete->inner) DeleteError(todelete); clean((void *)todelete); return; }
int CTraderApi::_ReqUserLogin(char type, void* pApi1, void* pApi2, double double1, double double2, void* ptr1, int size1, void* ptr2, int size2, void* ptr3, int size3) { Error_STRUCT* pErr = nullptr; m_msgQueue->Input_NoCopy(ResponseType::ResponseType_OnConnectionStatus, m_msgQueue, m_pClass, ConnectionStatus::ConnectionStatus_Logining, 0, nullptr, 0, nullptr, 0, nullptr, 0); CSingleUser* pUser = new CSingleUser(this); pUser->m_pClass = m_pClass; pUser->m_msgQueue = m_msgQueue; strcpy(pUser->m_UserID, m_UserInfo.UserID); m_UserID_User_Map.insert(pair<string, CSingleUser*>(m_UserInfo.UserID, pUser)); if (m_pDefaultUser == nullptr) { m_pDefaultUser = pUser; } void* pClient = m_pApi->Login(m_UserInfo.UserID, m_UserInfo.Password, m_UserInfo.ExtInfoChar64, &pErr); pUser->m_pClient = pClient; m_Client_User_Map.insert(pair<void*, CSingleUser*>(pClient, pUser)); if (pClient) { // 有授权信息要输出 RspUserLoginField* pField = (RspUserLoginField*)m_msgQueue->new_block(sizeof(RspUserLoginField)); if (pErr) { pField->RawErrorID = pErr->ErrCode; strcpy(pField->Text, pErr->ErrInfo); } m_msgQueue->Input_NoCopy(ResponseType::ResponseType_OnConnectionStatus, m_msgQueue, m_pClass, ConnectionStatus::ConnectionStatus_Logined, 0, pField, sizeof(pField), nullptr, 0, nullptr, 0); // 登录下一个账号 //++m_UserInfo_Pos; //ReqUserLogin(); } else { if (pErr) { RspUserLoginField* pField = (RspUserLoginField*)m_msgQueue->new_block(sizeof(RspUserLoginField)); pField->RawErrorID = pErr->ErrCode; strcpy(pField->Text, pErr->ErrInfo); m_msgQueue->Input_NoCopy(ResponseType::ResponseType_OnConnectionStatus, m_msgQueue, m_pClass, ConnectionStatus::ConnectionStatus_Disconnected, 0, pField, sizeof(RspUserLoginField), nullptr, 0, nullptr, 0); } } DeleteError(pErr); return 0; }
void DeleteErrorStack(void * par) { if(ErrorStack) { while(ErrorStack->itemcount) DeleteError((Error *)LL_pop(ErrorStack)); LL_delete(ErrorStack); ErrorStack=0; } return; }