bool CNetDelegate::runRead() { int nRet = m_oSocket.ccRead(m_pReadBuffer, SOCKET_READ_BUFFER_SIZE); if( nRet == eSocketIoError || nRet == eSocketIoClosed ) { unregisterScheduler(); m_oSocket.ccClose(); m_eStatus = eSocketIoClosed; onDisconnected(); return true; } else { #if 1 CCLOG("CCSOCKET READ %d", nRet); #endif m_oReadBuffer.writeData(m_pReadBuffer, (unsigned int)nRet); #if USING_PACKAGE_HEAD_LENGTH while( m_oReadBuffer.isReadable(sizeof(int)) ) { m_oReadBuffer.moveReaderIndexToFront(); int n_head_len = m_oReadBuffer.readInt(); if( n_head_len <= 0 ) { CCLOGERROR("invalidate head length"); m_oReadBuffer.moveLeft(sizeof(int)); } int n_content_len = (int)m_oReadBuffer.length(); if( n_content_len - (int)(sizeof(int)) >= n_head_len ) { m_oReadBuffer.moveLeft(sizeof(unsigned int)); CBuffer* pData = m_oReadBuffer.readData(n_head_len); m_oReadBuffer.moveLeft(n_head_len); m_oReadBuffer.moveReaderIndexToFront(); m_oReadBuffer.moveWriterIndexToBack(); onMessageReceived(*pData); #if USING_LUA executeOnMessageReceivedScriptHandler(pData); #endif }else{ break; } } #else CBuffer* pData = (CBuffer*) m_oReadBuffer.copy(); pData->autorelease(); m_oReadBuffer.clear(); onMessageReceived(*pData); #if USING_LUA executeOnMessageReceivedScripHandler(pData); #endif #endif } return false; }
void CNetDelegate::send(char* pBuffer, unsigned int uLen) { if( !pBuffer || uLen == 0 || !isConnected() ) return; #if USING_PACKAGE_HEAD_LENGTH CBuffer* pBuf = new CBuffer(pBuffer, uLen); pBuf->autorelease(); send(pBuf); #else char* pTemp = new char[uLen]; memcpy(pTemp, pBuffer, uLen); _SENDBUFFER tBuf; tBuf.pBuffer = pTemp; tBuf.nLength = (int)uLen; tBuf.nOffset = 0; m_lSendBuffers.push_back(tBuf); #endif }