void NetworkConnection::HandleRecv(const boost::system::error_code & error, int32_t actual_bytes) { if (error || HasError() || m_service->HasStopped()) { if (m_socket.is_open()) { if (error == boost::asio::error::eof) //we got disconnected on the client side { OnError(error); //Disconnect(); } else StartError(error); } } else { m_recv_buffer.resize(actual_bytes); OnRecv(m_recv_buffer); m_pending_recvs.pop_front(); if (!m_pending_recvs.empty()) { StartRecv(m_pending_recvs.front()); } } }
void InitCycle(std::shared_ptr<NamedPipe>& pipe) { auto globals = globalStruct::GetGlobals(); if (!globals) return; auto svc = globals->GetService(); if (!svc) return; std::atomic_store(&globals->pipe, pipe); StartRecv(pipe); svc->post([pipe, globals]() { if (!pipe || !pipe->IsConnected()) return; auto strm = globals->GetStreamer(); if (!strm) return; try { Writer MyWriter(pipe); strm->startStream(MyWriter); strm->stream(MyWriter); } catch (NamedPipeException& ex) { pipe->Cleanup(); } }); }
void Connection::DispatchRecv( int32_t total_bytes ) { bool should_start_receive = m_pending_recvs.empty(); m_pending_recvs.push_back( total_bytes ); if( should_start_receive ) { StartRecv( total_bytes ); } }
// 连接回调 void TcpClient::Connected(const boost::system::error_code& err) { if (err) { std::cerr << "connect error: "<<err.message() << std::endl; return; } StartRecv(); }
void Connection::HandleRecv( const boost::system::error_code & error, int32_t actual_bytes ) { if( error || HasError() || m_hive->HasStopped() ) { StartError( error ); } else { m_recv_buffer.resize( actual_bytes ); OnRecv( m_recv_buffer ); m_pending_recvs.pop_front(); if( !m_pending_recvs.empty() ) { StartRecv( m_pending_recvs.front() ); } } }
bool GJContext::SignIn(LPCTSTR username,LPCTSTR password,CLoginFrame *loginFrame) { StopRecv(); this->m_pLoginFrame=loginFrame; bool bOk=true; JID *nSelf=new JID(); if(!nSelf) { bOk=false; }else if(!nSelf->setServer(m_Server)||!nSelf->setUsername(utf8enc(username))) { bOk=false; }else { if(m_pClient) m_pClient->disconnect(); m_pClient=new Client(*nSelf,encryptPassword(utf8enc(password)),m_Port); m_pVCardMgr=new VCardManager(m_pClient); if(!m_pClient) bOk=false; else { m_pClient->registerConnectionListener(this); m_pClient->registerIqHandler(this,0); m_pClient->registerMessageHandler(this); m_pClient->rosterManager()->registerRosterListener(this,false); bOk= m_pClient->connect(false); } } if(!bOk&&nSelf) delete nSelf; else { if(m_pSelf) delete m_pSelf; m_pSelf=nSelf; StartRecv(); } return bOk; }
void TcpClient::RecvComplete(const boost::system::error_code& err, size_t bytes_transferred) { if (err || bytes_transferred == 0) { std::cerr << "recv error: " << err.message() << std::endl; return; } _offset += bytes_transferred; int32_t remain = Decode(_read_buf, _offset); if (remain > 0 && remain < kBuffSize) { size_t remainoff = _offset - remain; memcpy(_read_buf, _read_buf + remainoff, remain); _offset = remain; } else { _offset = 0; } StartRecv(); }