Exemplo n.º 1
0
		Tag Request(std::shared_ptr<IRequest> p)
		{
			unsigned int num = m_requests.size();
			for (unsigned int ui=0; ui<num; ++ui)
			{
				if ( m_requests.at(ui) == nullptr )
				{
					m_requests.at(ui) = p;
					return static_cast<Tag>(ui);
				}
			}
			m_requests.push_back(p);
			return static_cast<Tag>(num);
		}
Exemplo n.º 2
0
//--------------------------------------------------------------------------------------//
void CMarketDataProvider::Subscribe(RequestVector& request)
{
	HRESULT hr = S_OK;
	
	try
	{
		IBatchPriceProviderPtr spBatchPriceProvider = GetBatchPriceProvider();
		if (static_cast<bool>(spBatchPriceProvider))
		{
			CComRecPtr<QuoteUpdateParams, &LIBID_PRICEPROVIDERSLib> RequestInfo;
			RequestInfo.Init();

			long outSize = static_cast<long>(request.size());
			SAFEARRAYBOUND sab = { outSize, 0 };
			LPSAFEARRAY psa = ::SafeArrayCreateEx( VT_RECORD, 1, &sab, (PVOID) RequestInfo.GetRecordInfo() );
			
			if(psa)
			{
				QuoteUpdateParams* pvOutData = NULL;
				if(SUCCEEDED(hr = ::SafeArrayAccessData(psa, (void**)&pvOutData)))
				{
					memset(pvOutData, 0,  outSize * sizeof(QuoteUpdateParams));			
					int j = 0;
					for (RequestVector::iterator it = request.begin(); it != request.end(); ++it)
					{
						(*it).CopyTo(pvOutData[j]);
						j++;
					}
					::SafeArrayUnaccessData(psa);
				}
			}
			_com_util::CheckError(spBatchPriceProvider->raw_SubscribeMultipleQuotes(&psa));
			::SafeArrayDestroy(psa);

			m_bInSubscribeMode = true;
		}
	}
	catch (_com_error& err)
	{
		TRACE_COM_ERROR(err);		
	}
	catch (...)
	{
		TRACE_UNKNOWN_ERROR();
	};
	return;
};