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); } }
TCHAR * TaskSynch::GetGroupTasksXML(Group *pGroup, int *pCount, StringBuffer &sbGroupXML) { IterWrapper<Task> iter(pGroup->IterateTasks()); Task *pTask = NULL; TCHAR *pXML = NULL; while(iter.Next()) { pTask = iter.Get(); pXML = pTask->ToXMLString(); sbGroupXML.append(pXML); delete [] pXML; *pCount += pTask->CompleteChildCount(); } return sbGroupXML; }
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; }