Example #1
0
void NFSClient::RefreshTask::Invoke()
{
	NFSClient* pClient = (NFSClient*)GetData();

	if (pClient == NULL)
	{
		return;
	}

	NFS_HEAD head;
	head.m_nMsgCode = CODE_TEST;

	char szBuf[4096+512] = {0};//4096表示buffer区,512表示包头

	if (pClient->m_pServerModule->m_pServer->m_nAllfileInfoLen > 0)
	{
		pClient->SendCmd(CODE_REFRESH_BEGIN);
	}
	else
	{
		pClient->SendCmd(CODE_REFRESH_FAILED);
		return;
	}

	head.m_iType = NFS_HEAD_DATA;
	head.m_nIndex = 0;
	head.m_nMsgCode = CODE_REFRESH_DOING;


	int iLeft = (pClient->m_pServerModule->m_pServer->m_nAllfileInfoLen)%MAX_DATA_LEN;
	int iCout = (pClient->m_pServerModule->m_pServer->m_nAllfileInfoLen)/MAX_DATA_LEN;

	head.m_nCount = iCout + 1;

	cout<<"刷新的传输次数:"<<head.m_nCount<<endl;

	MSocket* pClientDataSocket = pClient->m_pServerModule->m_pServer->m_DataSocket.Accept();

	for (int i = 0; i < iCout; ++i)
	{
		head.m_nLength = MAX_DATA_LEN;
		head.m_nIndex = i;
		head.SetBuffer(pClient->m_pServerModule->m_pServer->m_pszAllFileInfo + MAX_DATA_LEN*i,MAX_DATA_LEN);
		unsigned long len = head.GetStream(szBuf);
		unsigned int nResult = 0;

		pClientDataSocket->Send(szBuf,len);	
	}

	head.m_nLength = iLeft;
	head.m_nIndex = iCout;
	head.SetBuffer(pClient->m_pServerModule->m_pServer->m_pszAllFileInfo + MAX_DATA_LEN*iCout,iLeft);
	unsigned long len = head.GetStream(szBuf);
	pClientDataSocket->Send(szBuf,len);

	head.m_nLength = 0;
	head.m_nIndex = 0;
	head.m_nMsgCode = CODE_REFRESH_SUCCESS_DONE;
	len = head.GetStream(szBuf);

	pClientDataSocket->Send(szBuf,len);

	pClientDataSocket->Close();

	pClient->SendCmd(CODE_REFRESH_FINISH);
}