void ReceiveData(CTcpClient* tcpClient, CStringBuffer& buffer) { CScopedLock _lock; CStringBuffer responseString; CByteBuffer responseBuffer; dword numDataReceived = 0; dword totalDataReceived = 0; CStringConstIterator itB; CStringBuffer sBuffer; dword numData; for ( ; totalDataReceived < 10; ) { responseBuffer.set_BufferSize(__FILE__LINE__ totalDataReceived + MAX_BUFFER); _lock.unlock(); tcpClient->ReceiveData(responseBuffer.get_Buffer() + totalDataReceived, MAX_BUFFER, &numDataReceived); totalDataReceived += numDataReceived; _lock.lock(); responseBuffer.set_BufferSize(__FILE__LINE__ totalDataReceived); } responseString.convertFromByteBuffer(responseBuffer); itB = responseString.GetString(); buffer = responseString; if ( (itB[0] == _T('#')) && (itB[1] == _T('#')) && (itB[7] == _T('#')) && (itB[8] == _T('#')) ) { responseString.SubString(2, 5, sBuffer); if ( sBuffer.ScanString(_T("%u"), &numData) <= 0 ) return; } else return; for ( ; totalDataReceived < (10 + numData); ) { responseBuffer.set_BufferSize(__FILE__LINE__ totalDataReceived + MAX_BUFFER); _lock.unlock(); tcpClient->ReceiveData(responseBuffer.get_Buffer() + totalDataReceived, MAX_BUFFER, &numDataReceived); totalDataReceived += numDataReceived; _lock.lock(); responseBuffer.set_BufferSize(__FILE__LINE__ totalDataReceived); } responseString.convertFromByteBuffer(responseBuffer); responseString.SubString(10, numData, buffer); }
static void TestTCPClientKeepAlive_SendData(CTcpClient& tcpClient, const CStringBuffer& buffer) { CStringBuffer sBuffer; CByteBuffer bBuffer; dword numBytesSend; sBuffer.FormatString(__FILE__LINE__ _T("##%05d## %s"), buffer.GetLength(), buffer.GetString()); sBuffer.convertToByteBuffer(bBuffer); tcpClient.SendData(bBuffer.get_Buffer(), bBuffer.get_BufferSize(), &numBytesSend); assert(numBytesSend == bBuffer.get_BufferSize()); }
void SendData(CTcpClient* tcpClient, const CStringBuffer& buffer) { CScopedLock _lock; CStringBuffer sBuffer; CByteBuffer bBuffer; dword numBytesSend; sBuffer.FormatString(__FILE__LINE__ _T("##%05d## %s"), buffer.GetLength(), buffer.GetString()); sBuffer.convertToByteBuffer(bBuffer); _lock.unlock(); tcpClient->SendData(bBuffer.get_Buffer(), bBuffer.get_BufferSize(), &numBytesSend); assert(numBytesSend == bBuffer.get_BufferSize()); }