void TcpConnection::handleRead(Timestamp receiveTime) { LOG_DEBUG("TcpConnection::handleRead fd = %d, state = %s", socket_->fd(), getState(state_)); loop_->assertInLoopThread(); std::string data; size_t n = socket_->recv(data); inputBuffer_.write(data); if (n > 0) { messageCallback_(shared_from_this(), &inputBuffer_, receiveTime); } else if (n == 0) { handleClose(); } else { handleError(); } }
void ProtobufCodec::onMessage(netlib::connectionPtr conn,netlib::Buffer *buf) { while(buf->readableSize() >= (kMinMessageLen)) //类型为空,名字只占一个字母还有'/0' { printf("readableSize = %d\n",buf->readableSize()); int len = buf->peekInt32(); buf->moveReadIndex(sizeof(int32_t)); assert(len < kMaxMessageLen && len >= kMinMessageLen); if(buf->readableSize() >= static_cast<size_t>(len)) { MessagePtr message = parse(buf->getReadPeek(),len); //完整消息时才触发回调 messageCallback_(conn,message); buf->moveReadIndex(len); printf("111\n"); } printf("222\n"); } }
void Tcp_Session::handle_read(const boost::system::error_code& e, uint32_t bytes_transferred) { if (!e) { // TODO: you could do some message processing here, like breaking it up // into smaller parts, rejecting unknown messages or handling the message protocol std::string message(boost::asio::buffer_cast<const char*>(m_buffer.data()), bytes_transferred); //std::cout <<"Tcp_Session::handle_read : "<< message << std::endl; m_buffer.consume(bytes_transferred); // create function to notify listeners messageCallback_(shared_from_this(), message); // wait for the next message read(); } else if (e != boost::asio::error::operation_aborted) { DisconnectedCallback_(shared_from_this()); } }
void ProtobufCodec::onMessage(const TSessionPtr& connection, const std::string& strmessage) { //message length const uint32_t len = PeekUInt32(strmessage.c_str());//after ntohl if (kMinMessageLen < len && len < kMaxMessageLen) { if (len == strmessage.size() - kHeaderLen - 2)//checksum and "\r\n" { shared_ptr_Msg message = Decode(strmessage.c_str() + kHeaderLen, len); //handle message callback messageCallback_(connection, message); } else { //invaild message } } else { //Invalid length //errorCallback_ } }