Example #1
0
void CIwHTTPQueue::Update()
{
	if (m_Request.size())
	{
		if (g_GotResult)
		{
			m_HTTP.Cancel();
			g_GotResult = false;

			Request request = m_Request[0];
			m_Request.erase(0);

			if (g_Result)
			{
				// Call the requests callback with the received data
				if (request.Callback)
				{
					request.Callback(request.pArgument, (const char*)g_szContentType, g_Result, g_ResultLen);
				}

				// Free result
				s3eFree(g_Result);
				g_szContentType[0] = 0;
				g_Result = 0;
			}
			else
			{
				if (request.CallbackError)
				{
					request.CallbackError(request.pArgument);
				}
			}

			delete[] (char*)request.pURL;

			// Begin fetching the next request
			if (m_Request.size())
			{
				if (m_Request[0].Callback)
				{
					if (m_Request[0].usePost)
					{
						m_timeout = m_Request[0].timeout;
						m_requestStart = s3eTimerGetMs();
						m_HTTP.Post(m_Request[0].pURL, m_Request[0].szBuffer, m_Request[0].bufferLen, GotHeaders, NULL);
					}
					else
					{
						m_timeout = m_Request[0].timeout;
						m_requestStart = s3eTimerGetMs();
						m_HTTP.Get(m_Request[0].pURL, GotHeaders, NULL);
					}
				}
				else
				{
					g_GotResult = true;
				}
			}
		}
		else
		{
			uint64 now = s3eTimerGetMs();

			if (m_Request[0].timeout != -1 && (now - m_requestStart) > m_Request[0].timeout)
			{
				m_Request[0].timeout = -1;
				g_GotResult = true;
				m_HTTP.Cancel();
				s3eDeviceYield(0);
			}
		}
	}
}