void * YHSocketSendThread::Execute() { bool loop = true; while(loop) { try { m_manager->m_condition.LockMutEx(); // 如果没有消息等待发送, 则等待, 添加消息后, 该线程将被唤醒 while (m_manager->m_queue->count() == 0) { m_manager->m_condition.Wait(); if (m_destroy) { m_manager->m_condition.UnlockMutEx(); return NULL; } } YHByteArray * bytes = (YHByteArray *)m_manager->m_queue->objectAtIndex(0); bytes->retain(); m_manager->m_queue->removeObjectAtIndex(0); m_manager->m_condition.UnlockMutEx(); // 阻塞, 将消息发送出去 m_manager->m_connectManager->connectedSocket()->SendData(bytes->getBuffer(), bytes->readableBytes()); bytes->release(); if (m_destroy) { loop = false; } } catch (SocketException e) { m_manager->m_connectManager->close(); m_manager->m_condition.LockMutEx(); m_manager->m_queue->removeAllObjects(); m_manager->m_condition.UnlockMutEx(); CCLOG("%s", (const char *)e); loop = false; } catch (ThreadException e) { CCLOG("%s", (const char *)e); } } return NULL; }
YHByteArray * YHHttpClient::recvData() { YHByteArray * bytes = NULL; if (m_queue->count() != 0) { bytes = (YHByteArray *)m_queue->objectAtIndex(0); bytes->retain(); m_queue->removeObjectAtIndex(0); } return bytes; }
YHByteArray * YHSocketRecvManager::recv() { if (m_mutex.TryLock()) { YHByteArray * bytes = NULL; if (m_queue->count() != 0) { bytes = (YHByteArray *)m_queue->objectAtIndex(0); bytes->retain(); m_queue->removeObjectAtIndex(0); } m_mutex.Unlock(); return bytes; } return NULL; }