void CServerDlg::RemovePkgInfo(HP_CONNID dwHP_CONNID) { //CCriSecLock locallock(m_spThis->m_csPkgInfo); TPkgInfo* pInfo = FindPkgInfo(dwHP_CONNID); ASSERT(pInfo != nullptr); delete pInfo; }
EnHandleResult CServerDlg::OnReceive(CONNID dwConnID, int iLength) { TPkgInfo* pInfo = FindPkgInfo(dwConnID); if(pInfo != nullptr) { int required = pInfo->length; int remain = iLength; while(remain >= required) { remain -= required; CBufferPtr buffer(required); EnFetchResult result = m_Server->Fetch(dwConnID, buffer, (int)buffer.Size()); if(result == FR_OK) { if(pInfo->is_header) { TPkgHeader* pHeader = (TPkgHeader*)buffer.Ptr(); TRACE("[Server] head -> seq: %d, body_len: %d\n", pHeader->seq, pHeader->body_len); required = pHeader->body_len; } else { TPkgBody* pBody = (TPkgBody*)(BYTE*)buffer; TRACE("[Server] body -> name: %s, age: %d, desc: %s\n", pBody->name, pBody->age, pBody->desc); required = sizeof(TPkgHeader); } pInfo->is_header = !pInfo->is_header; pInfo->length = required; ::PostOnReceive(dwConnID, buffer, (int)buffer.Size()); if(!m_Server->Send(dwConnID, buffer, (int)buffer.Size())) return HR_ERROR; } } } return HR_OK; }