Exemple #1
0
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;
}
Exemple #2
0
void DeleteError(Error * todelete)
{
	if(todelete->inner)
		DeleteError(todelete);

	clean((void *)todelete);
	
	return;
}
Exemple #3
0
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;
}
Exemple #4
0
void DeleteErrorStack(void * par)
{
	if(ErrorStack)
	{
		while(ErrorStack->itemcount)
			DeleteError((Error *)LL_pop(ErrorStack));
		LL_delete(ErrorStack);
		ErrorStack=0;
	}

	return;
}