예제 #1
0
DWORD WINAPI UploadUserInfo(LPVOID pVoid)
{
	DWORD dwReturnCode = 0;
	CXInstall m_Install;
	BOOL	IsUploaded	= FALSE;
	BOOL	IsSaved		= FALSE;
	int		iCount		= 0;

	CHttpRequest *pRegisterRequest = (CHttpRequest *)pVoid;
	if(pRegisterRequest->m_pUrlRequest[0] == '\0')
		goto XF_EXIT;

	while(!IsUploaded || !IsSaved)
	{
		if(++iCount > 3)
			break;

		if(!IsUploaded && pRegisterRequest->ConnectUrl(
			pRegisterRequest->m_pUrlRequest
			) == XERR_SUCCESS)
		{
			pRegisterRequest->m_UserInfo.iStatus = REG_STATUS_REGISTERED;
			IsUploaded = TRUE;
		}

		if(m_Install.SaveReg(REG_INFO_ITEM, (BYTE*)&pRegisterRequest->m_UserInfo, sizeof(XUSER_INFO)))
		{
			dwReturnCode = NET_UPLOAD_SUCCESS;
			IsSaved = TRUE;
			break;
		}
		
		break;	// not retry
		Sleep(180000);
	}

XF_EXIT:
	if(!pRegisterRequest->m_bIsClose)
		pRegisterRequest->m_pParent->SendMessage(WM_NET_MESSAGE
			, MAX_NET_COMMAND + 1, dwReturnCode);

	return dwReturnCode;
}
예제 #2
0
DWORD WINAPI DownloadCommandFile(LPVOID pVoid)
{
	CString		tmpStr;
	long		tmpLong;
	int			i;
	int			tmpCount	= 0;

	m_bIsDownloading = TRUE;

	DWORD dwReturnCode = 0;
	CHttpRequest *pDownloadCommand = (CHttpRequest *)pVoid;
	CXInstall m_Install;

	if(pDownloadCommand->m_pUrlRequest[0] == 0)
	{
		dwReturnCode = XERR_INVALID_PARAMETER;
		goto XF_EXIT;
	}
	
	TCHAR	sCommand[MAX_NET_COMMAND][MAX_NET_COMMAND_LENTH];

	if(pDownloadCommand->m_CommandHeader.lCount > 0)
	{
		pDownloadCommand->lCommandId = new long[pDownloadCommand->m_CommandHeader.lCount];
		m_Install.ReadReg(REG_NET_COMMAND_ITEM
			, (BYTE*)pDownloadCommand->lCommandId, sizeof(long) * pDownloadCommand->m_CommandHeader.lCount);
	}

	if(pDownloadCommand->ConnectUrl(pDownloadCommand->m_pUrlRequest
		, (TCHAR*)sCommand, &pDownloadCommand->m_CommandHeader.lVersion,&tmpCount) != XERR_SUCCESS)
	{
		dwReturnCode = XERR_INTERNET_CONNECT_ERROR;
		goto XF_EXIT;
	}

	if(tmpCount < 1)
	{
		dwReturnCode = XERR_INTERNET_CONNECT_ERROR;
		goto XF_EXIT;
	}

	if(tmpCount == 1)
		goto ONLY_VERSION;

	for(i = 1; i < tmpCount; i++)
	{
		tmpStr	= sCommand[i];
		tmpLong = atol(tmpStr.Left(MAX_NET_COMMAND_VERSION_LENTH));

		int j = 0;
		for(j; j < pDownloadCommand->m_CommandHeader.lCount; j++)
		{
			if(tmpLong == pDownloadCommand->lCommandId [j])
				break;
		}

		if(j < pDownloadCommand->m_CommandHeader.lCount)
			continue;

		long *pLong = NULL;

		if(pDownloadCommand->m_CommandHeader.lCount > 0)
		{
			pLong = new long[pDownloadCommand->m_CommandHeader.lCount];
			memcpy(pLong, pDownloadCommand->lCommandId, sizeof(long) * pDownloadCommand->m_CommandHeader.lCount);
			delete[](pDownloadCommand->lCommandId);
		}

		pDownloadCommand->lCommandId = new long[pDownloadCommand->m_CommandHeader.lCount + 1];

		if(pDownloadCommand->m_CommandHeader.lCount > 0)
		{
			memcpy(pDownloadCommand->lCommandId, pLong, sizeof(long) * pDownloadCommand->m_CommandHeader.lCount);
			delete[](pLong);
		}

		pDownloadCommand->lCommandId[pDownloadCommand->m_CommandHeader.lCount] = tmpLong;
		pDownloadCommand->m_CommandHeader.lCount ++;

		int iCommand	= atoi(tmpStr.Mid(MAX_NET_COMMAND_VERSION_LENTH + 1
							, MAX_NET_COMMAND_COMMAND_LENTH));
		CString sMessage= tmpStr.Mid(MAX_NET_COMMAND_VERSION_LENTH 
							+ MAX_NET_COMMAND_COMMAND_LENTH + 2);

		sMessage.Replace(13, '\0');
		sMessage.Replace(10, '\0');

		if(sMessage.GetAt(0) == '\0')
			break;
		
		switch(iCommand)
		{
		case NET_COMMAND_CHANGE_POST_MESSAGE:
			_tcscpy(pDownloadCommand->m_sMessage[i], sMessage);
			if(!pDownloadCommand->m_bIsClose)
				pDownloadCommand->m_pParent->SendMessage(WM_NET_MESSAGE, i, NULL);
			dwReturnCode = NET_COMMAND_HAVE_MESSAGE;
			break;

		default:
			break;
		}
	}

	// Syn not save time
	//pDownloadCommand->m_CommandHeader.tCheckTime = CTime::GetCurrentTime();

	m_Install.SaveReg(REG_NET_COMMAND_HEADER_ITEM, 
		(BYTE*)&pDownloadCommand->m_CommandHeader, sizeof(XNET_COMMAND_HEADER));

	m_Install.SaveReg(REG_NET_COMMAND_ITEM, (BYTE*)pDownloadCommand->lCommandId
		, sizeof(long) * pDownloadCommand->m_CommandHeader.lCount);

	if(pDownloadCommand->lCommandId != NULL)
	{
		delete pDownloadCommand->lCommandId;
		pDownloadCommand->lCommandId = NULL;
	}

ONLY_VERSION:
	{
		LPTSTR pNewVersion = sCommand[0] + MAX_NET_COMMAND_VERSION_LENTH + 1;
		int iLength = pDownloadCommand->m_sVersion.GetLength();
		if(strnicmp((LPCTSTR)pDownloadCommand->m_sVersion, pNewVersion, iLength) < 0)
		{
			memcpy(pDownloadCommand->m_sNewVersion, pNewVersion, iLength);
			pDownloadCommand->m_sNewVersion[iLength] = 0;
			dwReturnCode = NET_COMMAND_HAVE_NEW_VERSION;
		}
	}

XF_EXIT:
	if(!pDownloadCommand->m_bIsClose)
		pDownloadCommand->m_pParent->SendMessage(WM_NET_MESSAGE
			, MAX_NET_COMMAND, dwReturnCode);

	m_bIsDownloading = FALSE;

	return dwReturnCode;
}