Exemple #1
0
void TaskSynch::HandleUserSynch(unsigned __int64 since, bool isResponse, unsigned long ip)
{
	UserManager *pUserMan = m_pDataManager->GetUserManagerInstance();
	User *pUser = pUserMan->FindUserFromIP(ip);
	int len = 0;
	if(pUser)
	{
		IterWrapper<Task> iter(pUser->IterateModifiedOrAssignedTasks(since));
		char *pMsg = NULL;
		Task *pTask = NULL;
		while(iter.Next())
		{
			pTask= iter.Get();
			unsigned long hashLen = 0;
			StringBuffer sb(1024);
			unsigned char *pSegHash = HashTaskTreeSeg(pTask->ToXMLString(sb), &hashLen);
#ifdef DEBUG
			OutputDebugString(_T("Handle User Synch: "));
			OutputDebugString(sb);
			OutputDebugString(_T("\n"));
#endif
			if(pSegHash)
			{
				pMsg = MakeTaskSynchTreeSegMsg(pSegHash, hashLen, pTask->GetID(), pTask->GetModifiedDate(), false, &len);
				m_pNetwork->Send(pMsg, len, ip);
				delete [] pSegHash;
			}
		}
	}
	if(!isResponse)
	{
		char *pMsg = MakeUserTaskSynchReq(0, true, &len);
		m_pNetwork->Send(pMsg, len, ip);
	}
}
Exemple #2
0
void TaskSynch::SynchTaskTreeSeg(Task* pSrcTask, unsigned long ipAddr)
{
	Task::TaskSet *pTaskSet = pSrcTask->getChildren();
	IterWrapper<Task> iter(pTaskSet->Iterate());
	Task *pTask = NULL;
	while(iter.Next())
	{
		int msgLen = 0;
		unsigned long hashLen = 0;
		pTask = iter.Get();
		unsigned char *pSegHash = HashTaskTreeSeg(pTask->ToXMLString(), &hashLen);
		if(pSegHash)
		{
			char *pMsg = MakeTaskSynchTreeSegMsg(pSegHash, hashLen, pTask->GetID(), pTask->GetModifiedDate(), false, &msgLen);
			m_pNetwork->Send(pMsg, msgLen, ipAddr);
			delete [] pSegHash;
		}
		
	}
	iter.Clean();
	delete pTaskSet;
}