本文整理汇总了C++中ace_asynch_read_stream::Result::bytes_transferred方法的典型用法代码示例。如果您正苦于以下问题:C++ Result::bytes_transferred方法的具体用法?C++ Result::bytes_transferred怎么用?C++ Result::bytes_transferred使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ace_asynch_read_stream::Result
的用法示例。
在下文中一共展示了Result::bytes_transferred方法的8个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
void
Svc_Handler::handle_read_stream (const ACE_Asynch_Read_Stream::Result &result)
{
if (result.success () && result.bytes_transferred () > 0)
{
result.message_block ().rd_ptr ()[result.message_block ().length ()] = '\0';
// Print out the message received from the server.
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("(%t) message size %d.\n"),
result.message_block ().length ()));
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("%C"),
result.message_block ().rd_ptr ()));
// Reset the message block here to make sure multiple writes to
// the pipe don't keep appending to the message_block!
this->mb_.reset ();
this->ar_.read (this->mb_, this->mb_.size ());
}
else
ACE_Proactor::end_event_loop ();
}
示例2: handle_read_stream
void ProactorService::handle_read_stream( const ACE_Asynch_Read_Stream::Result& result )
{
ACE_Message_Block& block = result.message_block();
if (!result.success() || result.bytes_transferred() == 0)
{
block.release();
ReserveClose();
}
else
{
if (false == ISession::OnReceive(block.rd_ptr(), (unsigned short)block.length(), m_sessionDesc))
{
block.release();
ReserveClose();
return;
}
//20150322 memory leak fix
SendInternal(block.rd_ptr(), (unsigned short)block.length());
block.release();
PostRecv();
}
}
示例3: if
void
PSession::trace_read_completion (const ACE_Asynch_Read_Stream::Result &result)
{
{
ACE_GUARD (ACE_SYNCH_MUTEX, monitor, this->mutex ());
this->update_last_time();
if (result.success())
this->total_rcv_ += result.bytes_transferred ();
}
int loglevel = this->config().loglevel ();
ACE_Message_Block & mb = result.message_block ();
size_t xfer_bytes = result.bytes_transferred();
char * last = mb.wr_ptr();
char * first = last - xfer_bytes;
if (loglevel == 0)
{
LogLocker log_lock;
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("(%t) **** %s=%d handle_read_stream() ****\n"),
this->get_name(),
this->index()));
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("bytes_to_read = %d\n"),
result.bytes_to_read ()));
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("handle = %d\n"),
result.handle ()));
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("bytes_transfered = %d\n"),
xfer_bytes));
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("error = %d\n"),
result.error ()));
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("message_block:\n")));
ACE_HEX_DUMP ((LM_DEBUG, first, xfer_bytes));
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("**** end of message ****************\n")));
}
else if (result.error () != 0 )
{
LogLocker log_lock;
ACE_Log_Msg::instance ()->errnum (result.error ());
ACE_OS::last_error (result.error ());
ACE_Log_Msg::instance ()->log (LM_ERROR,
ACE_TEXT ("(%t) %s=%d READ %p\n"),
this->get_name (),
this->index (),
ACE_TEXT ("ERROR"));
}
else if (loglevel == 1)
{
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("(%t) %s=%d read_bytes=%d OK\n"),
this->get_name (),
this->index (),
xfer_bytes));
}
return;
}
示例4: handle_read_stream
void Reciever::handle_read_stream (const ACE_Asynch_Read_Stream::Result &result)
{
ACE_Message_Block &mb = result.message_block ();
//if the connection is failed£¬release the connection resource to the client
if (!result.success () || result.bytes_transferred () == 0)
{
mb.release ();
delete this;
return;
}
ACE_OS::printf("In read data\n");
dispatcher = new MessageDispatcher();
dispatcher->dispatchMessage(mb);
handler = new MessageHandler();
ACE_UINT32 cmd = dispatcher->getCmd();
ACE_Message_Block* smb;
//case CONNECT_SERVER
//------------------------------------------------------------------------//
if(cmd == COM::CONNECT_SERVER)
{
ACE_OS::printf("In CONNECT_SERVER\n");
pair<ACE_UINT16,ACE_UINT16> randomPos = handler->handleConnectionSever(dispatcher->getIP(),dispatcher->getPort());
if(randomPos.first != 0 && randomPos.second != 0)
{
MessageConstructor::getInstance()->setAddress(this->local_address);
smb = MessageConstructor::getInstance()->createConnectionAck(randomPos.first,randomPos.second,DEFAULT_AOI_RADIUS);
}
}
//case GET_SCENE_DATA
//------------------------------------------------------------------------//
else if(cmd == COM::GET_SCENE_DATA)
{
}
//case CONNECT_FAIL_REPORT
//------------------------------------------------------------------------//
//case CLIENT_MOVE
//------------------------------------------------------------------------//
//case CLIENT_QUIT
//------------------------------------------------------------------------//
//case MORE_COMMAND
//------------------------------------------------------------------------//
dispatcher->setMB_NULL();
mb.release();
ACE_OS::printf("\nMMB data:%s\n",smb->rd_ptr());
if (this->writer_.write(*smb,smb->length()) != 0)
{
ACE_OS::printf("Write Failed!");
//MessageConstructor::getInstance()->setMB_NULL();
smb->release();
delete this;
return;
}
MessageConstructor::getInstance()->setMB_NULL();
if(handler != NULL)
delete handler;
if(dispatcher != NULL)
delete dispatcher;
smb->release();
}
示例5: if
void
Client_Service_Handler::handle_read_stream (
const ACE_Asynch_Read_Stream::Result &result)
{
ACE_GUARD (ACE_SYNCH_RECURSIVE_MUTEX, guard, this->mtx_);
this->pending_reads_--;
if (!result.success () || 0 == result.bytes_transferred ())
{
// Error or remote disconnect
result.message_block ().release ();
if (!this->closing_)
{
// No error message when shutting down
if (!result.success ())
{
ACE_DEBUG ((LM_DEBUG, ACE_TEXT (
"Client_Service_Handler::handle_read_stream: error: %d\n"),
result.error ()));
}
else
{
ACE_DEBUG ((LM_DEBUG, ACE_TEXT (
"Client_Service_Handler::handle_read_stream: remote disconnect\n")));
}
}
this->read_completed_.signal ();
this->cancel_and_close ();
}
else if (result.bytes_transferred () < result.bytes_to_read ())
{
// More to read...
if (this->read (result.message_block(),
result.bytes_to_read () - result.bytes_transferred ()) < 0)
{
result.message_block ().release ();
this->cancel_and_close ();
}
}
else
{
// Read it all
this->completed_reads_++;
result.message_block ().release ();
// We now have sent and received data in the proactor thread. Signal the
// main thread to try sending data in the main thread.
if (this->completed_reads_ == 1)
{
this->ready_for_external_write_.signal ();
}
else
{
// The main thread wrote data that was echoed back to us on our
// second read. If we get here, the test was successful in that
// the main thread successfully sent data to the server.
this->read_successful_ = 1;
this->read_completed_.signal ();
}
// Next read
if (this->read_data () < 0)
{
this->cancel_and_close ();
}
}
}
示例6: handle_read_stream
void CProConnectClient::handle_read_stream(const ACE_Asynch_Read_Stream::Result &result)
{
ACE_Message_Block& mb = result.message_block();
uint32 u4PacketLen = (uint32)result.bytes_transferred();
//OUR_DEBUG((LM_DEBUG,"[CProConnectClient::handle_read_stream] m_nServerID=%d, bytes_transferred=%d, this=0x%08x.\n",
// m_nServerID,
// u4PacketLen,
// this));
if(!result.success() || u4PacketLen == 0)
{
mb.release();
if(NULL != m_pClientMessage)
{
_ClientIPInfo objServerIPInfo;
sprintf_safe(objServerIPInfo.m_szClientIP, MAX_BUFF_20, "%s", m_AddrRemote.get_host_addr());
objServerIPInfo.m_nPort = m_AddrRemote.get_port_number();
//这里只处理远端服务器断开连接的消息,回调ConnectError
//服务器主动关闭不在回调ConnectError
if(S2S_NEED_CALLBACK == m_ems2s)
{
m_pClientMessage->ConnectError((int)ACE_OS::last_error(), objServerIPInfo);
}
}
//OUR_DEBUG((LM_INFO, "[CProConnectClient::handle_read_stream]m_ems2s=%d.\n", m_ems2s));
Close();
return;
}
else
{
//处理接收数据(这里不区分是不是完整包,交给上层逻辑自己去判定)
if(NULL != m_pClientMessage)
{
_ClientIPInfo objServerIPInfo;
sprintf_safe(objServerIPInfo.m_szClientIP, MAX_BUFF_20, "%s", m_AddrRemote.get_host_addr());
objServerIPInfo.m_nPort = m_AddrRemote.get_port_number();
//m_pClientMessage->RecvData(&mb, objServerIPInfo);
//这里处理一下是不是完整包
uint16 u2CommandID = 0;
ACE_Message_Block* pRecvFinish = NULL;
m_atvRecv = ACE_OS::gettimeofday();
m_emRecvState = SERVER_RECV_BEGIN;
while(true)
{
bool blRet = m_pClientMessage->Recv_Format_data(&mb, App_MessageBlockManager::instance(), u2CommandID, pRecvFinish);
if(true == blRet)
{
if(App_MainConfig::instance()->GetConnectServerRunType() == 0)
{
//调用数据包处理
m_pClientMessage->RecvData(u2CommandID, pRecvFinish, objServerIPInfo);
//回收处理包
App_MessageBlockManager::instance()->Close(pRecvFinish);
}
else
{
//异步消息处理
_Server_Message_Info* pServer_Message_Info = new _Server_Message_Info();
pServer_Message_Info->m_pClientMessage = m_pClientMessage;
pServer_Message_Info->m_objServerIPInfo = objServerIPInfo;
pServer_Message_Info->m_pRecvFinish = pRecvFinish;
pServer_Message_Info->m_u2CommandID = u2CommandID;
App_ServerMessageTask::instance()->PutMessage(pServer_Message_Info);
}
}
else
{
break;
}
}
}
mb.release();
m_emRecvState = SERVER_RECV_END;
//接受下一个数据包
RecvData(App_MainConfig::instance()->GetConnectServerRecvBuffer());
}
}
示例7: if
void
Receiver::handle_read_stream (const ACE_Asynch_Read_Stream::Result &result)
{
ACE_Message_Block *mb = &result.message_block ();
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("Receiver::handle_read_stream - (%s) read %d\n"),
this->odd_ ? ACE_TEXT ("ODD ") : ACE_TEXT ("EVEN"),
result.bytes_transferred ()));
// Transfer only complete chunks to the writer.
// Save last partial chunk for the next call.
// On disconnect (error or 0 transferred), transfer whatever we have.
// at this stage there should not be anything there
ACE_TEST_ASSERT (!this->partial_chunk_);
// first, remove the empty chunks
remove_empty_chunks (mb);
if (mb && Receiver::writer_)
{ // there's something to write, and who to write to
// write everything or only complete chunks?
// write everything - when no new bytes were transferred
int write_everything = 0;
if (!result.bytes_transferred ())
write_everything = 1;
if (write_everything)
Receiver::writer_->handle_read_chunks_chain (mb,
this->odd_ ? ODD : EVEN);
else
{ // filter out the partial chunk at the end (if present)
// and save it for later before writing the full chunks
// have this->partial_chunk_ point to the last chunk in the chain
size_t last_index = last_chunk (mb, this->partial_chunk_);
if (this->partial_chunk_ &&
this->partial_chunk_->length () < chunk_size)
{ // found partial chunk at end of chain
// detach it from the chain
if (last_index > 1) // chain bigger than 1
{
ACE_Message_Block *pre_last = mb;
for (size_t index = 1; index < last_index - 1; ++index)
pre_last = pre_last->cont ();
// detach partial chunk from chain
pre_last->cont (0);
}
else
// chain in length of 1 - so we need to zero mb
mb = 0;
}
else // last is a full chunk, so hand it over with the rest
this->partial_chunk_ = 0;
// transfer (if there's anything left)
if (mb && mb->total_length ())
Receiver::writer_->handle_read_chunks_chain (
mb,
this->odd_ ? ODD : EVEN);
// initiate more reads only if no error
if (!result.error ())
this->initiate_read_stream ();
else
ACE_TEST_ASSERT (0);
}
}
else if (mb && !Receiver::writer_)
// no one to write to
free_chunks_chain (mb);
--this->io_count_;
this->check_destroy ();
}
示例8: handle_read_stream
void CProConsoleHandle::handle_read_stream(const ACE_Asynch_Read_Stream::Result &result)
{
ACE_Message_Block& mb = result.message_block();
uint32 u4PacketLen = (uint32)result.bytes_transferred();
int nTran = (int)result.bytes_transferred();
if(!result.success() || result.bytes_transferred() == 0)
{
//链接断开
if(m_pPacketParse->GetMessageHead() != NULL)
{
App_MessageBlockManager::instance()->Close(m_pPacketParse->GetMessageHead());
}
if(m_pPacketParse->GetMessageBody() != NULL)
{
App_MessageBlockManager::instance()->Close(m_pPacketParse->GetMessageBody());
}
if(&mb != m_pPacketParse->GetMessageHead() && &mb != m_pPacketParse->GetMessageBody())
{
//OUR_DEBUG((LM_DEBUG,"[CProConsoleHandle::handle_read_stream] Message_block release.\n"));
App_MessageBlockManager::instance()->Close(&mb);
}
SAFE_DELETE(m_pPacketParse);
OUR_DEBUG((LM_DEBUG,"[%tCConnectHandler::handle_read_stream]Connectid=[%d] error(%d)...\n", GetConnectID(), errno));
//AppLogManager::instance()->WriteLog(LOG_SYSTEM_CONNECT, "Close Connection from [%s:%d] RecvSize = %d, RecvCount = %d, SendSize = %d, SendCount = %d.",m_addrRemote.get_host_addr(), m_addrRemote.get_port_number(), m_u4AllRecvSize, m_u4AllRecvCount, m_u4AllSendSize, m_u4AllSendCount);
//因为是要关闭连接,所以要多关闭一次IO,对应Open设置的1的初始值
Close(2);
return;
}
m_atvInput = ACE_OS::gettimeofday();
if(result.bytes_transferred() < result.bytes_to_read())
{
//短读,继续读
int nRead = (int)result.bytes_to_read() - (int)result.bytes_transferred();
if(-1 == m_Reader.read(mb, nRead))
{
if(m_pPacketParse->GetMessageHead() != NULL)
{
App_MessageBlockManager::instance()->Close(m_pPacketParse->GetMessageHead());
}
if(m_pPacketParse->GetMessageBody() != NULL)
{
App_MessageBlockManager::instance()->Close(m_pPacketParse->GetMessageBody());
}
if(&mb != m_pPacketParse->GetMessageHead() && &mb != m_pPacketParse->GetMessageBody())
{
App_MessageBlockManager::instance()->Close(&mb);
}
SAFE_DELETE(m_pPacketParse);
OUR_DEBUG((LM_ERROR, "[CConnectHandler::handle_read_stream]Read Shoter error(%d).", errno));
//AppLogManager::instance()->WriteLog(LOG_SYSTEM_CONNECT, "Close Connection from [%s:%d] RecvSize = %d, RecvCount = %d, SendSize = %d, SendCount = %d.",m_addrRemote.get_host_addr(), m_addrRemote.get_port_number(), m_u4AllRecvSize, m_u4AllRecvCount, m_u4AllSendSize, m_u4AllSendCount);
//因为是要关闭连接,所以要多关闭一次IO,对应Open设置的1的初始值
Close(2);
return;
}
}
else if(mb.length() == m_pPacketParse->GetPacketHeadLen() && m_pPacketParse->GetIsHead() == false)
{
//判断头的合法性
m_pPacketParse->SetPacketHead(GetConnectID(), &mb, App_MessageBlockManager::instance());
uint32 u4PacketBodyLen = m_pPacketParse->GetPacketBodyLen();
//如果超过了最大包长度,为非法数据
if(u4PacketBodyLen >= MAX_MSG_PACKETLENGTH || u4PacketBodyLen <= 0)
{
OUR_DEBUG((LM_ERROR, "[CConnectHandler::handle_read_stream]u4PacketHeadLen(%d) more than MAX_MSG_PACKETLENGTH.", u4PacketBodyLen));
if(m_pPacketParse->GetMessageHead() != NULL)
{
App_MessageBlockManager::instance()->Close(m_pPacketParse->GetMessageHead());
}
if(m_pPacketParse->GetMessageBody() != NULL)
{
App_MessageBlockManager::instance()->Close(m_pPacketParse->GetMessageBody());
}
if(&mb != m_pPacketParse->GetMessageHead() && &mb != m_pPacketParse->GetMessageBody())
{
App_MessageBlockManager::instance()->Close(&mb);
}
SAFE_DELETE(m_pPacketParse);
Close(2);
return;
}
else
{
//.........这里部分代码省略.........