dword ClientTask() { CScopedLock _lock; CTcpClient* pClient = NULL; CDataDoubleLinkedListT<CTcpClient>::Iterator it = _tcpclients.Begin(); if ( it && (*it) ) { pClient = *it; _tcpclients.Remove(it, EmptyDeleteFunc, NULL); } if ( !pClient ) return 0; CStringBuffer sBuffer; wcout(_T("ClientTask")); try { CStringConstIterator itB; bool bExit = false; _lock.unlock(); ReceiveData(pClient, sBuffer); wcout(sBuffer.GetString()); SendData(pClient, sBuffer); ReceiveData(pClient, sBuffer); wcout(sBuffer.GetString()); SendData(pClient, sBuffer); ReceiveData(pClient, sBuffer); wcout(sBuffer.GetString()); SendData(pClient, sBuffer); ReceiveData(pClient, sBuffer); wcout(sBuffer.GetString()); SendData(pClient, sBuffer); ReceiveData(pClient, sBuffer); itB = sBuffer; itB.Find(_T("STOP\r\n")); if ( itB.IsBegin() ) bExit = true; wcout(sBuffer.GetString()); SendData(pClient, sBuffer); pClient->CloseConnection(); _lock.lock(); pClient->release(); _bExit = bExit; } catch ( CTcpClientException* ex ) { COUT << ex->GetExceptionMessage() << endl; pClient->CloseConnection(); } return 0; }
static void __stdcall CTestTCPServerDeleteFunc( ConstPointer data, Pointer context ) { CTcpClient* pClient = CastAnyPtr(CTcpClient, CastMutable(Pointer, data)); pClient->release(); }